《一人工智能方向实习一》
实习报告
专业:计算机科学与技术
班级:12419013
学号:
姓名:
江苏科技大学计算机学院
2016年3月
实验一数据聚类分析
一、实验目的
编程实现数据聚类的算法。
二、实验内容
k-means聚类算法。
三、实验原理方法和手段
k-means算法接受参数k ;然后将事先输入的 n个数据对象划分为 k个聚类以便使得
所获得的聚类满足:同一聚类中的对象相似度较高
四、实验条件
Matlab2014b
五、实验步骤
(1)初始化k个聚类中心。
(2)计算数据集各数据到中心的距离,选取到中心距离最短的为该数据所属类别。
(3)计算(2)分类后,k个类别的中心(即求聚类平均距离)
(4)继续执行(2)(3)直到k个聚类中心不再变化(或者数据集所属类别不再变化)
六、实验代码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% mai n.m
% k-mea ns algorithm
% @author matcloud
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear;
close all ;
load fisheriris ;
X = [meas(:,3) meas(:,4)];
figure;
plot(X(:,1),X(:,2), 'ko' ,'MarkerSize' ,4);
title( 'fisheriris dataset' , 'FontSize' ,18, 'Color' , 'red');
[idx,ctrs] = kmea ns(X,3);
figure;
subplot(1,2,1);
plot(X(idx==1,1),X(idx==1,2), 'ro' , 'MarkerSize' ,4);
hold on;
plot(X(idx==2,1),X(idx==2,2), hold on;
plot(X(idx==3,1),X(idx==3,2), hold on;
plot(ctrs(:,1),ctrs(:,2).
'go' , 'MarkerSize' ,4);
'bo' , 'MarkerSize' ,4); 'kx' ,'MarkerSize' ,12);
,'FontSize' ,16, 'Color' , 'red');
[idx,ctrs] = my_kmea ns(X,3); subplot(1,2,2);
plot(X(idx==1,1),X(idx= =1,2), 'ro' ,'MarkerSize' ,4)
;
hold on;
plot(X(idx==2,1),X(idx==2,2), 'go' ,'MarkerSize'
,4) ;
hold on;
plot(X(idx==3,1),X(idx= =3,2), 'bo' ,'MarkerSize' ,4)
; hold on;
plot(ctrs(:,1),ctrs(:,2), 'kx' , 'MarkerSize' ,12);
title( 'custom kmeans' ,'FontSize' ,16, 'Color' , 'red');
fun ctio n [idx,ctrs] = my_kmea ns(m,k) [row col] = size(m);
%init k cen troids
p = ran dperm(size(m,1));
for i = 1 : k
ctrs(i,:) = m(p(i),:);
end
idx = zeros(row,1); %idex is poin ter of group while 1
d = dist2matrix(m,ctrs);
[z,g] = mi n(d,[],2);
if (g == idx) break;
else
idx = g;
end
%update ctroids for i = 1 : k
v = fin d(g == i);
if v
ctrs(i,:) = mea n(m(v,:),1);
end
end
end
end
title( 'official kmea ns'
fun ctio n [idx,ctrs] = my_kmea ns(m,k) [row col] = size(m);
%init k cen troids
p = ran dperm(size(m,1));
for i = 1 : k
ctrs(i,:) = m(p(i),:);
end
idx = zeros(row,1); %idex is poin ter of group while 1
d = dist2matrix(m,ctrs);
[z,g] = mi n(d,[],2);
if (g == idx) break;
else
idx = g;
end
%update ctroids for i = 1 : k
v = fin d(g == i);
if v
ctrs(i,:) = mea n(m(v,:),1);
end
end
end
end
七、实验结果
Fig ure 1
File Edit View Insert Tools Desktop Window Help
fisheriris dataset
1 斤y” ---------
O O
00 00 0>o o c
口Q Q
Q 口口0o o ■ooeo o o -
QQ Q a
O □□o o o
O O
o o a d
-0 Q00 g:-
0 060 B
c ooooooo
0? 0 0 0
O O 0
0 iB 5 03
匚1
L Q一
0 CQQ0
QOC Q
1 O'OOCOO0
Q 04
1?ii i1
图1-1未聚类数据
■ j —n 仙:并j ri—1Jnta 吃绘re" 审.
j j J3,a □吕■口
图1-2聚类后
八、实验分析
算法的时间复杂度上界为0(n*k*t), 其中t是迭代次数。k-means算法是一种基于
样本间相似性度量的间接聚类方法,属于非监督学习方法。此算法以k为参数,把n个
对象分为k个簇,以使簇内具有较高的相似度,而且簇间的相似度较低。相似度的计算
根据一个簇中对象的平均值(被看作簇的重心)来进行。此算法首先随机选择 k个对象,每个对象代表一个聚类的质心。对于其余的每一个对象,根据该对象与各聚类质心之间的距离,把它分配到与之最相似的聚类中。然后,计算每个聚类的新质心。重复上述过
程,直到准则函数收敛。 k-means算法是一种较典型的逐点修改迭代的动态聚类算法,其要点是以误差平方和为准则函数。逐点修改类中心:一个象元样本按某一原则,归属
于某一组类后,就要重新计算这个组类的均值,并且以新的均值作为凝聚中心点进行下一次象元素聚类;逐批修改类中心:在全部象元样本按某一组的类中心分类之后,再计算修改各类的均值,作为下一次分类的凝聚中心点。
实验二主成分分析
一、实验目的
编程实现主成分的算法。
二、实验内容
PCA主成分分析算法。
三、实验原理方法和手段
PCA的原理就是将原来的样本数据投影到一个新的空间中,相当于我们在矩阵分析里面学习的将一组矩阵映射到另外的坐标系下。通过一个转换坐标,也可以理解成把一组坐标转换到另外一组坐标系下,但是在新的坐标系下,表示原来的原本不需要那么多的变量,只需要原来样本的最大的一个线性无关组的特征值对应的空间的坐标即可。
四、实验条件
Matlab2014b
五、实验步骤
(1)求dataAdjust 矩阵
(2)求dataAdjust的协方差矩阵
协方差公式
n ——
i (X i X)(Y Y)
cov(X,Y)—-
n 1
协方差矩阵
C n n (C i,j,G,j cov(Dimi i, Dimi j))
(3)求协方差矩阵的特征向量及特征值
(4)取特征值最大的的特征向量eigenVectors
(5)降维矩阵finalData = dataAdjust * eigenVectors
六、实验代码
data = [2.5 2.4;0.5 0.7;2.2 2.9;1.9 2.2;3.1 3.0;2.3 2.7;2 1.6;1 1.1;1.5 1.6;1.1 0.9];
dim1_mea n = mean( data(:,1));
dim2_mea n = mean( data(:,2));
dataAdjust = [data(:,1)-dim1_mea n,data(:,2)-dim2_mea n];
c = cov(dataAdjust);
[vectors,values] = eig(c); values = values* on es(2,1);
[max_v,max_idx] = max(values,[],1); eige nV ectors = vectors(:,max_idx); fin alData = dataAdjust * eige nV ectors;
七、实验结果
图2-1实验结果
八、实验分析
主成分分析,是考察多个变量间相关性一种多元统计方法,研究如何通过少数几个主成
分来揭示多个变量间的内部结构,即从原始变量中导出少数几个主成分,使它们尽可能多地保留原始变量的信息,且彼此间互不相关?通常数学上的处理就是将原来 P个指标作线性组合,作为新的综合指标。
实验三最近邻分类器
一、 实验目的
编程实现最近邻分类器算法。
二、 实验内容
最近邻分类器算法,这里采用 k 近邻算法。
三、 实验原理方法和手段
最近邻分类为监督学习方法,已知
n 个类别,判定给定样本属于哪个类别。
四、 实验条件
Matlab2014b
五、 实验步骤
(4)
C 中值最大的便是该样本所属类别。
六、实验代码
close all ; clear; clc;
red = randn (100,2)+o nes(100,2); red = [red on es(100,1)];
计算样本到各数据集点的距离 D
1
n
2 —
① 欧式距离 d(x, y) x y i 1 X i y i
2
c
② 绝对值距离
d(x, y) || x
y|
^1 x i y i
③ 明氏距离
④ 马氏距离
⑤ 余弦距离
对D 排序
给定k 值(即邻居数),从D 中选取k 个数据,统计k 个数据中所属类别的个数 Co
II 1
n
p
II
x
i 1 X i y i
d(x,y)
d(x,y)
i 为对应的特征值)
d(x,y) x
cos(x, y)
n
i1x i y i
n 2 n 2
必 … y i
i 1 i
i 1 i
green = randn (100,2)-o nes(100,2);
green = [gree n on es(100,1)*2];
data = [red;gree n];
figure;
plot(red(:,1),red(:,2), 'ro' ,‘MarkerSize' ,4);
hold on;
plot(green(:,1),green(:,2), 'go' , 'MarkerSize' ,4);
blue_sample = randn( 1,2);
hold on;
plot(blue_sample(:,1),blue_sample(:,2), 'bo' , 'MarkerSize'
,4); %give a k value
k = in put( 'in put n eighbors cou nt' );
[row,col] = size(data);
for i = 1 : row
d(:,i) = no rm(data(i,1:2) - blue_sample(1,:));
end
[d,idx] = sort(d);
for i = 1 : k
k_vector(:,i) = idx(:,i);
end
%caculate category
redCou nt = 0;
gree nCou nt = 0;
for i = 1 : k
tag = data(k_vector(1,i),3);
if (tag == 1)
redCou nt = redCou nt+1;
else if (tag == 2)
gree nCou nt = gree nCou nt+1;
end
end
end
if (redCount > greenCount)
blue_sample = [blue_sample 1];
disp( 'sample is red' );
else
blue_sample = [blue_sample 2];
disp( 'sample is gree n' ); end
图3-1实验结果
八、实验分析
KNN 算法本身简单有效,它是一种 lazy-learni ng 算法,分类器不需要使用训练集进
行训练,训练时间复杂度为
0。KNN 分类的计算复杂度和训练集中的文档数目成正比,也就
是说,如果训练集中文档总数为 n ,那么KNN 的分类时间复杂度为 O(n)。
实验四贝叶斯分类器
一、 实验目的
编程实现贝叶斯分类器算法。
二、 实验内容
贝叶斯分类器算法。
三、 实验原理方法和手段
已知类别,给定一样本判定样本所属类别。
四、 实验条件
Matlab2014b
五、 实验步骤
(1) 已知k 个类别
七、实验结果 | __________
hfwQpf
rh*
■■■"■TI
M L* f in-v ID*'T < i??
匚 smrmnil Umilcrw
hTWi to
1
5w r? cures h
input, jifliph^ws 匚ounrJO
丄z ELe-^A
"A?
* Figwt 1
Fk [A JSs*加睛I?h 也母中?也n 鼻"■ E 卵
厂町旳廿"
⑵计算k个类别所占全体的比重Pr(k)
⑶给定值radius,在二维空间,以样本点为圆心以radiu为半径作圆。
⑷统计圆内k个类别的分布情况(在圆内包含该类多少个数据点)记为C(k)
计算圆内分布比重 Pr_c(k)
⑹根据贝叶斯公式P(A/B) P(A) P(B/A)计算各类最终比重,取值大的作为样P(B)
本类别。
六、实验代码
clear;
close all ;
%init two cluters
rH = ran di([80,100]);
gH = ran di([80,100]);
red = randn( rH,2)+on es(rH,2); gree n = randn( gH,2)-on es(gH,2);
red = [red on es(rH,1)];
gree n = [gree n on es(gH,1)*2]; data = [red;gree n];
total = rH+gH;
pr_red = rH/(total); pr_gree n = gH/(total);
%i nit a sample
sample_blue = randn( 1,2);
plot(red(:,1),red(:,2), 'ro' ,‘MarkerSize' ,4);
hold on;
plot(green(:,1),green(:,2), 'go' , 'MarkerSize' ,4);
hold on;
plot(sample_blue(:,1),sample_blue(:,2), 'b*' , 'MarkerSize' for i = 1 : total p = data(i,1:2); tmp = sample_blue - p; d(:,i) = sqrt(dot(tmp,tmp)); end
%select an circle(ce nter is sample_blue) radius = 5; redCou nt = 0; gree nCou nt = 0; for i = 1 : total
if (d(:,i) <= radius)
if (data(i,3) == 1) %red cluster redCou nt = redCou nt + 1;
else if (data(i,3) == 2) %green cluster gree nCou nt = gree nCou nt+1;
end
end end end
pr_redI nCircle = redCou nt/rH; pr_gree nln Circle = gree nCou nt/gH;
pr_redF inal = pr_red * pr_redl nCircle; pr_gree nFinal = pr_gree n * pr_gree nln Circle;
fpri ntf( 'final red pr = %f\n' ,pr_redF in al);
fpri ntf(
'final gree n pr = %f\n'
if (pr_redFinal >= pr_greenFinal) disp(
'sample is red cluster' else disp( 'sample is gree n cluster'
end
七、实验结果
,6);
,pr_gree nFin al);
);
);
多实际应用中,朴素贝叶斯模型参数估计使用最大似然估计方法; 斯概率或者任何贝叶斯模型的情况下,朴素贝叶斯模型也能奏效。
八、实验分析
对于某些类型的概率模型,
在监督式学习的样本集中能获取得非常好的分类效果。 在许
换而言之,在不用到贝叶
图4-1实验结果
实验五特征提取算法
一、 实验目的
编程实现特征提取算法。
二、 实验内容
harris 特征提取算法。
三、 实验原理方法和手段
图像中的特征点即为图像边缘直线形成夹角而成的角点。
图像中较突出的尖锐点和其它
有特殊意义的点,这些点反映了地物的特征,对研究具有重要意义。在点特征提取的算法中, 主要包含了 Susan 算法、Harris 算法和Moravec 算法,这些算法可以对图像中角点进行提 取,从而应用于实践生产中,例如对建筑物角点提取,人脸中眼睛部位角点的提取。
四、 实验条件
Matlab2014b
五、 实验步骤
⑴
计算图像l(x,y)在x 和y 方向的梯度 J, l y .
l x — I 1
0 1 ,l y — I
x x
(2)计算图像两个方向梯度的乘积
Harris 响应值R,并对小于某一阈值 t 的R 置为零
2
R {R : detM - (traceM) t}
(5)在3*3或5*5的邻域内进行非最大值抑制,局部最大值点即为图像中的角点
六、实验代码
%fun cti on: %
Harris
角点检测
%注意:
(3)使用高斯函数对
A
g(I :)
I y 2
I x 2
, I
X
1
y 1
y , 1
xy 1
x 1
y
I y 2
和I xy 进行高斯加权(取
w,C g(l") i y w, B
1)
g(l xy ) I xy w
(4)计算每个像素的
% matlab 自带的corner函数即可实现harris角点检测。但考虑到harris角点的经典性,本程序将其实现,纯粹出于学习目的,了解特征点检测的方法。
% 其中所有参数均与matlab默认保持一致
%
%清空变量,读取图像
clear;close all
src= imread('images/girl.jpg');
gray=rgb2gray(src);
gray = im2double(gray);
%缩放图像,减少运算时间
gray = imresize(gray, 0.2);
%十算X方向和Y方向的梯度及其平方
X=imfilter(gray,[-1 0 1]);
X2=X.A2;
Y=imfilter(gray,[-1 0 1]');
丫2=丫人2;
XY=X.*Y;
%生成高斯卷积核,对X2、丫2、XY进行平滑
h=fspecial('gaussia n',[5 1],1.5);
w=h*h';
A=imfilter(X2,w);
B=imfilter(Y2,w);
C=imfilter(XY,w);
%L般取值0.04-0.06
k=0.04;
RMax=0;
size=size(gray);
height=size(1);
width=size(2);
R=zeros(height,width);
for h=1:height
for w=1:width
% 计算M矩阵
M=[A(h,w) C(h,w);C(h,w) B(h,w)];
% 计算F用于判断是否是边缘
R(h,w)=det(M) - k*(trace(M)F2;
% 获得R的最大值,之后用于确定判断角点的阈值
if(R(h,w)>RMax)
RMax=R(h,w);
end
end
end
0/用 Q*RMaX乍为阈值,判断一个点是不是角点
Q=0.01;
R_corner=(R>=(Q*RMax)).*R;
/寻找3x3邻域内的最大值,只有一个交点在8邻域内是该邻域的最大点时,才认为该点是角点
fun = @(x) max(x(:));
R_localMax = n lfilter(R,[3 3],fu n);
/寻找既满足角点阈值,又在其8邻域内是最大值点的点作为角点
/注意:需要剔除边缘点
[row,col]=fi nd(R_localMax(2:height-1,2:width-1)==R_cor ner(2:height-1,2:width
-1));
/绘制提取到的角点
figure(' name','Result');
subplot(1,2,1),imshow(gray),title('my-Harris'),
hold on
plot(col,row, 'b*'),
hold off
/用matlab自带的edge函数提取Harris角点,对比效果
C = corn er(gray);
subplot(1,2,2),imshow(gray),title('matlab-c onn er'),
hold on
plot(C(:,1), C(:,2), 'r*');
hold off
七、实验结果
? Figure 1; Result
Edit View Insert Tools Desktop Window Help
my-Harrls matlab-conner
图5-1实验结果
八、实验分析
对于某些类型的概率模型,在监督式学习的样本集中能获取得非常好的分类效果。在许多实际应用中,朴素贝叶斯模型参数估计使用最大似然估计方法;换而言之,在不用到贝叶
斯概率或者任何贝叶斯模型的情况下,朴素贝叶斯模型也能奏效。
File