邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表.
人话就是:
KNN算法用来解决, 如何判定某个点,归属于哪个集合中的问题。
解决办法是:
这个点和谁近, 就属于谁。 所谓K,就是找最近的K个点,这K个里面,谁多就属于谁。
例子
如下图,绿色圆要被决定赋予哪个类,是红色三角形还是蓝色四方形?
如果K=3,由于红色三角形所占比例为2/3,绿色圆将被赋予红色三角形那个类,如果K=5,由于蓝色四方形比例为3/5,因此绿色圆被赋予蓝色四方形类。
KNN算法很容易理解,也很容易实现。 但是正是因为这个原因,这个算法有很多的问题存在
KNN算法必须保存全部的数据集,如果训练数据集很大,那么就需要耗费大量的存储空间。
此外,由于必须对待分类数据计算与每一个训练数据的距离,非常耗时。
KNN还有个问题就是k的选择。k总是在过拟合与欠拟合之间游走。
对于K近邻模型来说,本来水平就一般,连参数也只有一个k可以调,就显得有点弱上加弱了
实现流程:
#coding=UTF-8
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
def knn_selector():
'''
用KNN对数据进行分类
'''
#(1) 获取数据
iris = load_iris()
#(2) 划分数据集
x_train,x_test,y_train,y_test = train_test_split(iris.data , iris.target , random_state= 15)
#(3) 特征工程:标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test= transfer.transform(x_test)
#(4) KNN算法预估器
estimator = KNeighborsClassifier(n_neighbors= 3)
estimator.fit(x_train, y_train)
#(5) 模型评估
score = estimator.score(x_test,y_test)
print("准确率为:\n", score)
if __name__=="__main__":
knn_selector()