首页 > 编程语言 >基于K最近邻算法在二分类和回归分析中的应用

基于K最近邻算法在二分类和回归分析中的应用

时间:2024-06-16 13:28:00浏览次数:14  
标签:KNN 基于 plt 回归 分类 算法 X2 y2

目录

前言:

案例一 、K近邻算法在二分类中的应用

1.生成训练集

2.用KNN算法拟合这些数据 

 4.验证KNN算法的分类结果

案例二、K近邻算法在多分类中的应用

1.生成多分类任务数据集

2.用KNN算法拟合这些数据 

 5.验证KNN算法的分类结果 

案例三 K近邻算法在回归分析中的应用 

1.生成回归分析任务数据集

 2. 用KNN算法进行回归分析 

 3.对模型准确率进行评分及模型优化


前言:

        K最近邻算法(KNN,K-NearestNeighbor)是一个非常经典而且原理十分容易理解的算法。本项目介绍K最近邻算法的原理和使用方法,讲解K最近邻分类和K最近邻回归,,并且使用K最近邻算法解决一个实际分类问题。

案例一 、K近邻算法在二分类中的应用

        手动生成有两个类别的数据集,把它作为机器学习的训练数据集,用KNN算法进行模型训练,然后对新的未知数据进行分类。

1.生成训练集

由于python中sklearn.darasets用pip原址安装很慢,所以我建议大家使用清华源下载,比较高效快捷,代码如下

pip install sklearn.darasets -i https://pypi.tuna.tsinghua.edu.cn/simple
#导入数据集生成器
from sklearn.datasets import make_blobs
#导入KNN分类器
from sklearn.neighbors import KNeighborsClassifier
#导入绘图工具
import matplotlib.pyplot as plt
#导入numpy
import numpy as np
#生成样本数为200、分类数为2的数据集
data = make_blobs(n_samples=200,centers = 2,random_state=8)
#大写的X表示数据的特征,小写的y表示数据对应的标签。
X,y = data
#将生成的数据集进行可视化
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.autumn,edgecolor='k')
Classifier:KNN


如果大家想要实现中文标题,我们可以加入以下代码,用来进行汉化

# 设置matplotlib以使用中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False    
分解器:KNN


2.用KNN算法拟合这些数据 

#创建模型
clf = KNeighborsClassifier()
#训练模型
clf.fit(X,y)
 3.绘出分类边界,创建分类模型,新数据分类预测
#下面的代码用于画图
x_min,x_max = X[:,0].min()-1,X[:,0].max()+1
y_min,y_max = X[:,1].min()-1,X[:,1].max()+1
#用不同的背景色表示不同的分类
xx,yy = np.meshgrid(np.arange(x_min,x_max,.02),np.arange(y_min,y_max,.02))
Z = clf.predict(np.c_[(xx.ravel(),yy.ravel())]).reshape(xx.shape)
plt.pcolormesh(xx,yy,Z,cmap=plt.cm.Pastel1_r)
 
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.autumn,edgecolor='k')
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("Classifier:KNN")
 
#把新的数据点用五边形表示出来
plt.scatter(7.75,4.72,marker='p',c='blue',s=200)
plt.show()

                

 4.验证KNN算法的分类结果

#对数据点分类进行预测
print('代码运行结果:')
print('====================================')
print('新数据点的分类是:',clf.predict([[7.75,4.72]]))
print('====================================')

代码运行结果:

====================================

新数据点的分类是: [1]

====================================

案例二、K近邻算法在多分类中的应用

1.生成多分类任务数据集

#导入数据集生成器
from sklearn.datasets import make_blobs
#导入KNN分类器
from sklearn.neighbors import KNeighborsClassifier
#导入绘图工具
import matplotlib.pyplot as plt
#导入numpy
import numpy as np
#生成样本数为300、分类数为3的数据集
data2 = make_blobs(n_samples=300,centers = 4,random_state=4)
# 设置matplotlib以使用中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False    
#大写的X表示数据的特征,小写的y表示数据对应的标签。
X2,y2 = data2
#将生成的数据集进行可视化
plt.scatter(X2[y2==0,0],X2[y2==0,1],cmap=plt.cm.spring,edgecolor='k',marker='o')
plt.scatter(X2[y2==1,0],X2[y2==1,1],cmap=plt.cm.spring,edgecolor='k',marker='^')
plt.scatter(X2[y2==2,0],X2[y2==2,1],cmap=plt.cm.spring,edgecolor='k',marker='s')
plt.scatter(X2[y2==3,0],X2[y2==3,1],cmap=plt.cm.spring,edgecolor='k',marker='D')

        ​​​​​​​         

2.用KNN算法拟合这些数据 

#创建模型
clf = KNeighborsClassifier()
#训练模型
clf.fit(X2,y2)
3.绘出分类边界,创建分类模型,新数据分类预测 
#下面的代码用于画图
x_min,x_max = X2[:,0].min()-1,X2[:,0].max()+1
y_min,y_max = X2[:,1].min()-1,X2[:,1].max()+1
#用不同的背景色表示不同的分类
xx,yy = np.meshgrid(np.arange(x_min,x_max,.02),np.arange(y_min,y_max,.02))
Z = clf.predict(np.c_[(xx.ravel(),yy.ravel())]).reshape(xx.shape)
plt.pcolormesh(xx,yy,Z,cmap=plt.cm.Set3)
 
plt.scatter(X2[y2==0,0],X2[y2==0,1],cmap=plt.cm.spring,edgecolor='k',marker='o')
plt.scatter(X2[y2==1,0],X2[y2==1,1],cmap=plt.cm.spring,edgecolor='k',marker='^')
plt.scatter(X2[y2==2,0],X2[y2==2,1],cmap=plt.cm.spring,edgecolor='k',marker='s')
plt.scatter(X2[y2==3,0],X2[y2==3,1],cmap=plt.cm.spring,edgecolor='k',marker='D')
plt.scatter(X[:,0],X[:,1],c=y,cmap=plt.cm.autumn,edgecolor='k')
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("Classifier:KNN")
plt.show()

        ​​​​​​​         

 5.验证KNN算法的分类结果 

#对数据点分类进行预测
print('代码运行结果:')
print('====================================')
print('模型准确率:{:.2f}'.format(clf.score(X2,y2)))
print('====================================')

代码运行结果:

====================================

模型准确率:0.99

====================================

案例三、K近邻算法在回归分析中的应用 

         K近邻算法不仅可以用于分类,还可以用于回归。其原理是通过找出一个样本的k个最近邻居,将这些邻居的某个属性的平均值赋给该样本,就可以得到该样本对应属性的值。

1.生成回归分析任务数据集

在scikit-learn的数据集生成器中,有一个使用方便的、用于回归分析的数据集生成器——make_regression函数。这里使用make_regression函数生成的数据集来进行试验。

#导入数据集生成器
from sklearn.datasets import make_regression
#导入绘图工具
import matplotlib.pyplot as plt
#导入numpy
import numpy as np
# 设置matplotlib以使用中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False    
#生成样本数为200、分类数为2的数据集
data = make_regression(n_features=1,n_informative=1,noise=30,random_state=5)
#大写的X表示数据的特征,小写的y表示数据对应的标签。
X,y = data
#将生成的数据集进行可视化
plt.scatter(X,y,c='b',edgecolor='r')
plt.show()

        ​​​​​​​        ​​​​​​​         

 2. 用KNN算法进行回归分析 

from sklearn.neighbors import KNeighborsRegressor
#创建模型
reg = KNeighborsRegressor()
#训练模型
reg.fit(X,y)
z = np.linspace(-2.5,2.5,200).reshape(-1,1)
plt.scatter(X,y,c='b',edgecolor='k')
plt.plot(z,reg.predict(z),c='r',linewidth=3)
plt.title("Classifier:KNN")
plt.show()

        ​​​​​​​        ​​​​​​​         

 3.对模型准确率进行评分及模型优化

#对模型准确率进行评分
print('代码运行结果:')
print('====================================')
print('模型准确率:{:.2f}'.format(reg.score(X,y)))
print('====================================')

代码运行结果:

====================================

模型准确率:0.78

====================================

模型评分只有0.78,这是一个差强人意的结果。为了提高模型的评分,可以尝试对K最近邻算法的近邻数进行调整。在默认情况下,K最近邻算法的n_neighbors为5,可以先尝试将它减小。

from sklearn.neighbors import KNeighborsRegressor
#创建模型
reg2 = KNeighborsRegressor(n_neighbors=2)
#训练模型
reg2.fit(X,y)
#重新可视化
plt.scatter(X,y,c='b',edgecolor='k')
plt.plot(z,reg2.predict(z),c='r',linewidth=3)
plt.title("KNN regressor:n_neighbors=2")
plt.show()

        ​​​​​​​        ​​​​​​​        ​​​​​​​         

#对数据点分类进行预测
print('代码运行结果:')
print('====================================')
print('模型准确率:{:.2f}'.format(reg2.score(X,y)))
print('====================================')

代码运行结果:

====================================

模型准确率:0.85

====================================

从评分结果可以看出,模型的评分从0.78提升到了0.85,有了较为显著的提升。这说明对K最近邻值进行调整,能够有效改善模型的准确率。

标签:KNN,基于,plt,回归,分类,算法,X2,y2
From: https://blog.csdn.net/weixin_49816293/article/details/139719027

相关文章