大数据方向硕士自学机器学习之路(1)——knn算法项目实战

本文大部分理论参考《机器学习入门到实践》一书,项目实战代码参考一些博主,并稍作修改。

  • K近邻算法原理
    • 简单解释
    • 三个基本要素
    • 特点
    • 项目实战

K近邻算法原理

K近邻分类算法是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该算法只要思路是:如果一个样本在特征空间中的k个最近邻的样本中的大多数属于A类,则该样本也属于A类。

简单解释

近朱者赤,近墨者黑。

三个基本要素

1、k值的选择
k值的选择会对结果产生重大影响,k值较小意味着只有与输入实例较近的训练实例才会对预测结果起作用,但容易产生过拟合。k值较大意味着与输入实例较远的训练实例也会对预测结果起作用,优点是减少学习的估计误差(对测试集的测试误差)。缺点是学习的近似误差(对训练集的训练误差)增大。其中,估计误差越小说明对未知数据的预测越好。在实际应用中,通常采用交叉验证的方法选择最优K值。
2、规则
多数表决
3、距离
欧氏距离(马氏距离);
cosine knn;
cubic knn;
weighted knn

特点

1、优点
简单,无须参数估计和训练;
精度高,对噪音不敏感;
适合于类域交叉混合的样本集;
适合于多分类问题。
2、缺点
计算量大;
可解释性差;
样本不均衡,预测容易出错。

项目实战

基于KNN的相关算法,已成功应用于手写体识别、数字验证吗识别、文本分类、聚类分析、预测分析、模式识别、图像处理等。
步骤:
1)初始化距离值为最大值,便于在搜索过程中迭代掉;

2)计算单个测试样本与所有训练样本之间的距离;

3)对获取的距离进行顺序排序;

4)选取与测试样本距离最小的k个训练样本;

5)确定k个训练样本所在类别的出现频率;

6)出现频率最高的类别即为测试样本的预测分类结果。
项目为区分某一电影为动作片还是武侠片。首先建立已知标签的样本,通过数字图像处理技术统计同多电影中打斗镜头和接吻镜头数,并对相应的电影标签。之后,使用可KNN算法解决未看过的电影是动作片还是爱情片。
代码如下:

aver1=[8 3];
covar1=[2 0;0 2.5];
data1=mvnrnd(aver1,covar1,100);
for i =1:100
     for j =1:2
     if data1(i,j)<0
           data(i,j) = 0
           end
     end 
end
label1 = ones(100,1);
plot(data1(:,1),data1(:,2),'+');
axis([-1 12 -1 12]);
xlabel('打斗镜头数');
ylabel('接吻镜头数');
hold on;
aver2=[3 8];
covar2=[2 0;0 2.5];
data1=mvnrnd(aver2,covar2,100);
for i =1:100
     for j =1:2
     if data1(i,j)<0
           data(i,j) = 0
           end
     end 
end
label1 = 2*ones(100,1);
plot(data2(:,1),data2(:,2),'ro');
data=[data1; data2];
label = [label1;label2];
k =11;
for movenum = 3:1:7
	for kissnum = 3:1:7
		test_data = [movenum kissnum];
		distance(i) = ones(200,1);
		for i =1:200
			distance(i) = sqrt((test_data(1)-data(i,1)).^2+(test_data(2)-data(i,2)).^2);
			end
		for i =1:k
			ma = distance(i);
			for j=i+1:200
				if distance(j)cls2
			plot(movenum ,kissnum,'k.');
		else
			plot(movenum ,kissnum,'g*');
		end
		label = [label1 ;label2];
	end
end
		

你可能感兴趣的:(大数据方向硕士自学机器学习之路(1)——knn算法项目实战)