KNN(K-Nearest Neighbor)算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类,也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。
KNN算法的思想非常简单:对于任意n维输入向量,分别对应于特征空间中的一个点,输出为该特征向量所对应的类别标签或预测值。
KNN算法是一种非常特别的机器学习算法,因为它没有一般意义上的学习过程。它的工作原理是利用训练数据对特征向量空间进行划分,并将划分结果作为最终算法模型。存在一个样本数据集合,也称作训练样本集,并且样本集中的每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。
输入没有标签的数据后,将这个没有标签的数据的每个特征与样本集中的数据对应的特征进行比较,然后提取样本中特征最相近的数据(最近邻)的分类标签。
一般而言,我们只选择样本数据集中前k个最相似的数据,这就是KNN算法中K的由来,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的类别,作为新数据的分类。
KNN分类算法的分类预测过程十分简单并容易理解:对于一个需要预测的输入向量x,我们只需要在训练数据集中寻找k个与向量x最近的向量的集合,然后把x的类别预测为这k个样本中类别数最多的那一类。
导入库
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import pandas as pd
#获得数据
li = load_iris()
#处理数据
#1.将datasets.base.Bunch转换为dataframe格式
x = pd.DataFrame(li.data,columns=['Min','Max','Mean','SD'])
#2.取出目标值
y = pd.DataFrame(li.target)
#3.将数据拆分成训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)
KNN算法对数据处理必须进行标准化!
#4.特征工程
std = StandardScaler()
#对训练集和测试集的特征值进行标准化
x_train = std.fit_transform(x_train)
x_test = std.fit_transform(x_test)
#5.进行算法
knn = KNeighborsClassifier()
#对训练集的数据进行处理 .values.ravel()移除数据转换警告
knn.fit(x_train,y_train.values.ravel())
#6.得出预测结果
y_predict = knn.predict(x_test)
#7.预测准确率
score = knn.score(x_test,y_test)
最终结果:
因为拆分数据集是随机的,所以准确率会有所波动,大致在80%~100%之间,勉强合格!
完整代码:
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import pandas as pd
def knncls():
#获得数据
li = load_iris()
#处理数据
#1.将datasets.base.Bunch转换为dataframe格式
x = pd.DataFrame(li.data,columns=['Min','Max','Mean','SD'])
#2.取出目标值
y = pd.DataFrame(li.target)
#3.将数据拆分成训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)
#4.特征工程
std = StandardScaler()
#对训练集和测试集的特征值进行标准化
x_train = std.fit_transform(x_train)
x_test = std.fit_transform(x_test)
#5.进行算法
knn = KNeighborsClassifier()
#对训练集的数据进行处理 .values.ravel()移除数据转换警告
knn.fit(x_train,y_train.values.ravel())
#6.得出预测结果
y_predict = knn.predict(x_test)
#7.预测准确率
score = knn.score(x_test,y_test)
print("测试集原始目标值:",y_test.values.tolist())
print("测试集的预测结果为:",y_predict)
print("预测的准确率为:",score)
return None
if __name__ == "__main__":
knncls()