KNN算法介绍及案例

文摘   其他   2024-11-02 20:27   湖北  

KNN算法原理:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

两个样本的距离一般是用欧式距离,即各变量之间的差值平方和再开方。由于各变量的数量级和离散程度都存在差异,在计算欧式距离前一定要进行标准化。

本文用常用的鸢尾花数据做来介绍KNN算法的实现。

  • 加载库
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier 
from sklearn import preprocessing
import matplotlib.pyplot as plt
import pandas as pd
  • 导入数据并进行标准化处理
df=pd.read_csv('iris.csv',encoding = "gbk")
X=df.drop(columns='种类')
y=df['种类']
minmax = preprocessing.MinMaxScaler()
# 标准化处理
Xn= minmax.fit_transform(X)
  • 通过设置不同的K值进行运算
X_train,X_test,y_train,y_test = train_test_split(Xn,y,test_size=0.2,random_state=3
dd=[]
for k in range(1,20):
    knn
=KNeighborsClassifier(n_neighbors=k)
    knn.fit(X_train,y_train)
    scores=cross_val_score(knn,X_train,y_train,cv=3,scoring='accuracy')#进行三次运算 
    mm=round(scores.mean(),3)# 取平均值,保留三位小数
    dd.append(scores.mean())  

本例k取12为最优。

  • 完整代码
from sklearn.model_selection import train_test_split 
from sklearn.neighbors import KNeighborsClassifier 
from sklearn import preprocessing
import matplotlib.pyplot as plt
import pandas as pd
df=pd.read_csv('iris.csv',encoding = "gbk")
X=df.drop(columns='种类')
y=df['种类']
minmax = preprocessing.MinMaxScaler()# 标准化处理
Xn= minmax.fit_transform(X)
X_train,X_test,y_train,y_test = train_test_split(Xn,y,test_size=0.2,random_state=3
dd=[]
for k in range(1,20):
    knn
=KNeighborsClassifier(n_neighbors=k)
    knn.fit(X_train,y_train)
    scores=cross_val_score(knn,X_train,y_train,cv=3,scoring='accuracy')#进行三次运算 
    mm=round(scores.mean(),3)# 取平均值,保留三位小数
    dd.append(scores.mean())  
plt.plot(range(1,20),dd)
plt.xlabel('K')
plt.ylabel('Accuracy') #通过图像选择最好的参数(从图形看出准确率最高为12)
plt.show()
knnbest=KNeighborsClassifier(n_neighbors=12
knnbest.fit(train_X,train_y) #训练模型
round(knnbest.score(test_X,test_y),3)

knn模型相对比较简单,也容易理解,大家都可以自己操作一下。


Python学习杂记
数据分析与挖掘、运筹优化、机器学习、AI 、数据可视化等。
 最新文章