INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
LABORATORIO 1 – SONAR
Danna Vanessa Flórez Rueda
Wilson David Jr Cudris Lengua
Carlos Arizmendi
Universidad Autónoma de Bucaramanga
Facultad Ingeniería
Bucaramanga
INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
ANÁLISIS DE BASE DE DATOS SONAR
BASE DE DATOS SONAR:
Sonar es una base de datos que contiene características de dos clases, las cuales son
elementos que se encuentran en la tierra, rocas y metal.
En esta base de datos contamos con 208 elementos, con los cuales buscamos
clasificarlos de tal manera que nos permita diferenciarlos entre sí.
PROCEDIMIENTO:
Se organizaron los 208 elementos de la base de datos, por clases en una sola matriz,
donde las variables estuvieran en las columnas y los datos característicos en las filas. Lo
que nos permite poder trabajar con los datos de una mejor manera.
MATRIZ DESORDENADA
MATRIZ ORDENADA
INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
Se realiza un análisis donde se separa cada una de las clases, una para metal y otra para
roca en sus respectivas matrices, para asi conocer el tipo de datos con el que se va a
trabajar:
Se utiliza la función llamada BOXPLOT, crea una diagrama de caja de los datos, donde
en cada cuadro, la marca central indica la mediana los bordes inferior y superior del
cuadro indican los percentiles, que permite conocer la media, desviación estandar,
maximos, minimos, en una sola imagen.
CLASE METAL:
Existen dos limites de datos. Entre ese rango de valores, esta la tendencia. El sistema
utiliza dos extremos y los datos que se encuentran por fuera de esos extremos son
despreciados para dar una exactitud del sistema. Con el boxplot creado se superpone los
dos sistemas, para poder asi obtener esos valores que mas definen las bases de datos.
INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
CLASE ROCA:
En cada caja la marca de la central indica la mediana y los bordes inferior y superior de la
caja indican los percentiles 25 y 75 respectivamente. Los bigotes se extienden a los más
extremos puntos de datos. No se consideran los valores de los extremos, y los valores de
los extremos se trazan individualmente usando el símbolo '+'.
SUPERPONEMOS ROCAS Y METALES:
Se realizo el rango intercuartil, que nos permite tener una idea de cuando tenemos un
dato que probabilidad hay de que sea de cierto tipo.
En estas graficas podemos
observar dos limites de datos, donde
nos muestra dos limites de datos,
entre ellos encontramos la
tendencia. En cada caja, la marca de la
central indica la mediana y los bordes
inferior y superior de la caja
indican los percentiles 25 y 75
respectivamente. Los
datos que se encuentran fuera de ese
INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
limite(los dos extremos), se trazan individualmente unsando el simbolo ‘+’, los cuales no
son tomados en cuenta para mayor exactitud del sistema.
Con la funcion boxplot se superpone los dos sistemas, obteniendo los valores mas
representativos de la base de datos.
RANGO INTERCUARTIL-STEM :
El rango intercuartil, la diferencia entre el tercer y el primer cuartil, permitiendo visualizar
la superposicion de las dos clases rocas y metal, el cual nos permite obtener la
probabilidad de que tan cierto es el tipo de dato analizado.
INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
En el análisis de datos con el rango intercuartil, donde sobresalga un dato, podemos
analisar que si se comparo la clase 1 de roca y clase 1 de metal, se tendra que las
posibilidades de que sea roca o metal seran mayores.
SKEWNESS:
INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
Con los indicadores de Skewness, podemos observar los grados de simetría o asimetría,
que se encuentran presentes en la distribución de probabilidad de unas variables
aleatorias sin necesidad de hacer su representación gráfica.
INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
CURTOSIS:
La curtosis determina el grado de concentración que presentan los valores de una
variable alrededor de la zona central de la distribución, caracteriza la elevación o la
planeidad de una distribución comparada con la distribución normal. Una curtosis positiva
indica una distribución relativamente elevada mientras que una curtosis negativa indica
una distribución relativamente plana.
INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
DESVIACIÓN ESTÁNDAR Y MEDIA DE LA CLASE METAL:
Donde la línea negra es la que representa la media de la clase metal, la roja la desviación
estándar más (+) la media y la azul es la desviación estándar menos (–) la media.
DESVIACIÓN ESTÁNDAR Y MEDIA DE LA CLASE ROCA:
INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
Donde la línea negra es la que representa la media de la clase roca, roja la desviación
estándar + la media y la azul la desviación estándar – la media.
DESVIACIÓN ESTÁNDAR, SUPERPOSICIÓN DE CLASES:
Posteriormente se crearon tres matrices la matriz training, la matriz de validation y la
matriz test.
SEPARACIÓN DE
DATOS
TRAINING=70%
VALIDATION=20%
CLASE METAL CLASE ROCA
Training=67 Training=59
Validation=22 Validation=19
Test=22 Test=19
INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
Con la media de la matriz de training obtenemos un vector el cual será el modelo para
comparar con los vectores de la matriz de validation posteriormente con los diferentes
tipos de distancias Ya obtenido este modelo, se empieza a comparar este vector con los
vectores de la matriz validation y se repite este proceso 150 veces para obtener un
promedio de datos.(Euclidea, City Block, Minkowski, Chebychev, Cosine, Correlation,
Hamming, Jaccard, Spearman).
TABLA DE PORCENTAJES DE DISTANCIAS:
INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
Se realizó un análisis de todas las que se utilizaron las distancias Euclidea, City Block,
Minkowski, Chebychev, Cosine, Correlation, Hamming, Jaccard, Spearman, poder obtener
la que mejor tenga porcentaje de clasificación:
MEDIA DE LOS PORCENTAJES DE LOS TIPOS DE LAS DISTANCIAS UTILIZADAS:
Con esta media podemos ver que el mejor método de clasificación es CITYBLOCK.
DESVIACIÓN ESTÁNDAR DE LA TABLA DE LAS MEDIDAS:
VARIANZA DE LA TABLA DE LAS MEDIDAS:
MÁXIMO DE LA TABLA DE LAS MEDIDAS:
MÍNIMO DE LA TABLA DE LAS MEDIDAS:
INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
CODIGO:
%% Integrantes % code. If an error occurs for a
% Danna Vanessa Flórez Rueda(DF) different file, try regenerating
% Wilson David Jr Cudris the code
Lengua(WC) % from the Import Tool.
%% Import data from text file. textscan(fileID, '%[^\n\r]',
% Script for importing data from startRow-1, 'WhiteSpace', '',
the following text file: 'ReturnOnError', false,
% 'EndOfLine', '\r\n');
% C:\Users\B12\Downloads\BASES dataArray = textscan(fileID,
DE DATOS IA-20200816\BASES DE formatSpec, 'Delimiter',
DATOS\BASES DE delimiter, 'MultipleDelimsAsOne',
DATOS\Sonar\[Link] true, 'TextType', 'string',
% 'ReturnOnError', false);
% To extend the code to different
selected data or a different text %% Close the text file.
file, fclose(fileID);
% generate a function instead of
a script. %% Convert the contents of
columns containing numeric text
% Auto-generated by MATLAB on to numbers.
2020/08/16 [Link] % Replace non-numeric text with
NaN.
%% Initialize variables. raw =
filename = repmat({''},length(dataArray{1}),
'C:\Users\DANA\Desktop\SONAR\sona length(dataArray)-1);
[Link]'; for col=1:length(dataArray)-1
;
delimiter = ' '; raw(1:length(dataArray{col}),col)
startRow = 2; = mat2cell(dataArray{col},
ones(length(dataArray{col}), 1));
%% Read columns of data as text: end
% For more information, see the numericData =
TEXTSCAN documentation. NaN(size(dataArray{1},1),size(dat
formatSpec = '%s%s%s%s%s%s%s%s% aArray,2));
[^\n\r]';
for col=[1,2,3,4,5,6,7,8]
%% Open the text file. % Converts text in the input
fileID = fopen(filename,'r'); cell array to numbers. Replaced
non-numeric
%% Read columns of data according % text with NaN.
to the format. rawData = dataArray{col};
% This call is based on the for row=1:size(rawData, 1)
structure of the file used to % Create a regular
generate this expression to detect and remove
non-numeric prefixes and
INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
% suffixes. R = cellfun(@(x) ~isnumeric(x) &&
regexstr = '(? ~islogical(x),raw); % Find non-
<prefix>.*?)(?<numbers>([-]*(\d+ numeric cells
[\,]*)+[\.]{0,1}\d*[eEdD]{0,1}[- raw(R) = {NaN}; % Replace non-
+]*\d*[i]{0,1})|([-]*(\d+ numeric cells
[\,]*)*[\.]{1,1}\d+[eEdD]{0,1}[-
+]*\d*[i]{0,1}))(?<suffix>.*)'; %% Create output variable
try sonar1 = cell2mat(raw);
result = %% Clear temporary variables
regexp(rawData(row), regexstr, clearvars filename delimiter
'names'); startRow formatSpec fileID
numbers = dataArray ans raw col numericData
[Link]; rawData row regexstr result
numbers invalidThousandsSeparator
% Detected commas in thousandsRegExp R;
non-thousand locations. %% Separar la matriz en Roca y
Metal
invalidThousandsSeparator = xDF_WC=sonar1;
false; nuevo=zeros(208,61);
if cont1=0;
[Link](',') cont2=1;
thousandsRegExp = for i=1:2287
'^[-/+]*\d+?(\,\d{3})*\. for j=1:6
{0,1}\d*$'; if mod(i,11)~=0
if
isempty(regexp(numbers, nuevo(cont2,cont1+j)=xDF_WC(i,j);
thousandsRegExp, 'once')) end
numbers = end
NaN; cont1=cont1+6;
if mod(i,11)==0
invalidThousandsSeparator = true; cont2=cont2+1;
end cont1=0;
end end
% Convert numeric end
text to numbers. for unos=([Link])'
if clase=xDF_WC(unos,7);
~invalidThousandsSeparator nuevo(:,end)=clase;
numbers = end
textscan(char(strrep(numbers, metal1=find(nuevo(:,61)==1);
',', '')), '%f'); roca=find(nuevo(:,61)==-1);
numericData(row, Longitud=length(nuevo);
col) = numbers{1}; for i=1:Longitud
raw{row, col} = [Metal]=nuevo(metal1,1:60);
numbers{1}; [Roca]=nuevo(roca,1:60);
end end
catch
raw{row, col} = %% Boxplots
rawData{row}; figure(1)
end boxplot(Roca)
end title('Boxplot Clase Roca')
end
figure(2)
boxplot(Metal)
%% Replace non-numeric cells with title('Boxplot Clase Metal')
NaN
figure(3)
INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
boxplot(Metal),hold dEstRoca,'g','linestyle','--'),
on,boxplot(Roca,'colors',repmat(' hold off, grid;
g',60)),hold off; title('Desviación estándar y
title('Boxplot superposición media de las Clases Roca y
Clases Roca y Metal') Metal')
%% Estadísticos legend('Desviación estándar+Media
%Media (Metal)','Media (Metal)','Media-
for m=1:60 Desviación estándar
(Metal)','Desviación
mediaMetal(m)=mean(Metal(:,m)); estándar+Media (Roca)','Media
mediaRoca(m)=mean(Roca(:,m)); (Roca)','Media-Desviación
end estándar (Roca)')
%Desviación estándar
for de=1:60 %Varianza
for v=1:60
dEstMetal(de)=std(Metal(:,de)); varMetal(v)=var(Metal(:,v));
dEstRoca(de)=std(Roca(:,de)); varMetal(v)=var(Metal(:,v));
end end
figure(4) %IQR
plot(mediaMetal+dEstMetal,'r','li iqrMetal=iqr(Metal);
nestyle','--'), hold on, iqrRoca=iqr(Roca);
plot(mediaMetal,'black'),
plot(mediaMetal- figure(7)
dEstMetal,'b','linestyle','--'), stem(iqrMetal,'b'), hold on,
hold off, grid; stem(iqrRoca,'r'), hold off;
title('Desviación estándar y title('Rango intercuartil')
media de la Clase Metal') legend('Metal','Roca')
legend('Desviación
estándar+Media','Media','Media- figure(8)
Desviación estándar') plot(iqrMetal,'b'), hold on,
plot(iqrRoca,'r'), hold off;
figure(5) title('Rango intercuartil')
plot(mediaRoca+dEstRoca,'r','line legend('Metal','Roca')
style','--'), hold on,
plot(mediaRoca,'black'), %Skewness
plot(mediaRoca- skMetal=skewness(Metal);
dEstRoca,'b','linestyle','--'), skRoca=skewness(Roca);
hold off, grid;
title('Desviación estándar y figure(9)
media de la Clase Roca') stem(skMetal,'b'), hold on,
legend('Desviación stem(skRoca,'r'),hold off;
estándar+Media','Media','Media- title('Skewness')
Desviación estándar') legend('Metal','Roca')
figure(6) figure(10)
plot(mediaMetal+dEstMetal,'b','li plot(skMetal,'b'), hold on,
nestyle','--'), hold on, plot(skRoca,'r'),hold off;
plot(mediaMetal,'r','LineWidth',1 title('Skewness')
), plot(mediaMetal- legend('Metal','Roca')
dEstMetal,'c','linestyle','--'),
plot(mediaRoca+dEstRoca,'m','line
%Kurtosis
style','--'), hold on,
ktMetal=kurtosis(Metal);
plot(mediaRoca,'black','LineWidth
ktRoca=kurtosis(Roca);
',1), plot(mediaRoca-
INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
figure(11) cMetal=mean(metalTraining,1);
stem(ktMetal,'b'), hold on, sorter=zeros(41,1);
stem(ktRoca,'r'), hold off;
title('Curtosis') %%Validación
legend('Metal','Roca')
validationS_Florez=[[metalValidat
figure(12) ion,ones(22,1)];[rocaValidation,-
plot(ktMetal,'b'), hold on, 1*ones(19,1)]];
plot(ktRoca,'r'), hold off; val=41;
title('Curtosis') randValidation=randperm(val);
legend('Metal','Roca')
validationS_Florez=validationS_Fl
%% 100 experimentos orez(randValidation,:);
for exp=1:100
%%Clase Roca %Calcular las distancias
nRoca=97; for dist=1:9
rocaRand=randperm(nRoca); switch dist
case 1
rocaRandTraining=rocaRand(1:59);
distancia='euclidean';
rocaRandValidation=rocaRand(60:78 case 2
);
rocaRandTest=rocaRand(79:97); distancia='cityblock';
case 3
rocaTraining=Roca(rocaRandTrainin
g,:); distancia='minkowski';
case 4
rocaValidation=Roca(rocaRandValid
ation,:); distancia='chebychev';
case 5
rocaTest=Roca(rocaRandTest,:);
%Centroides distancia='cosine';
cRoca=mean(rocaTraining,1); case 6
%Clase Metal distancia='correlation';
nMetal=111; case 7
metalRand=randperm(nMetal);
distancia='hamming';
metalRandTraining=metalRand(1:67) case 8
;
distancia='jaccard';
metalRandValidation=metalRand(68: case 9
89);
distancia='spearman';
metalRandTest=metalRand(90:111); end
rocaV=0;
metalTraining=Metal(metalRandTrai rocaF=0;
ning,:); metalV=0;
metalF=0;
metalValidation=Metal(metalRandVa
lidation,:); %Clasificación
for v=1:41
metalTest=Metal(metalRandTest,:);
%Centroides
INTELIGENCIA ARTIFICIAL
INGENIERÍA BIOMÉDICA
end
distMetal(v)=pdist2(validationS_F
lorez(v,1:60),cMetal,distancia); %Validación y
recopilación de resultados
distRoca(v)=pdist2(validationS_Fl
orez(v,1:60),cRoca,distancia); validationS_Florez=[validationS_F
if lorez,(distMetal)',
distRoca(v)>distMetal(v) (distRoca)',sorter];
sorter(v)=1; verdaderas=metalV+rocaV;
else
sorter(v)=-1; suma=metalV+rocaV+metalF+rocaF;
end
if sorter(v)==1 percentOS_WC=(verdaderas/suma)*10
if 0;
validationS_Florez(v,61)==sorter( tablaPercentO_Cudris
v) (exp,dist)=percentOS_WC;
end
metalV=metalV+1; end
else
%Media, desviación estándar,
rocaF=rocaF+1; varianza, máximos y mínimos de la
end tabla de
else %porcentajes
if meanPercent=mean(tablaPercentO_
validationS_Florez(v,61)==sorter( Cudris);
v) desvPercent=std(tablaPercentO_
Cudris);
rocaV=rocaV+1; varPercent=var(tablaPercentO_
else Cudris);
maxPercent=max(tablaPercentO_
metalF=metalF+1; Cudris);
end minPercent=min(tablaPercentO_
end Cudris);