1、什么是K-近邻算法(KNN)
如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
根据你的“邻居”来判断你的类别
若k=1,会很容易受到异常点的影响。k值取得过大,容易受到样本不均衡的影响
2)距离公式
欧式距离:
曼哈顿距离(绝对值) 明可夫斯基距离
2)API
- sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')
- n_neighbors:int,可选(默认= 5),即k值
- algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选用于计算最近邻居的算法:‘ball_tree’将会使用 BallTree,‘kd_tree’将使用 KDTree。‘auto’将尝试根据传递给fit方法的值来决定最合适的算法。 (不同实现方式影响效率)
2 鸢尾花预测分析
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 iris_demo():
"""
KNN算法训练鸢尾花数据集
:return:
"""
#1.获取数据
iris=load_iris()
#2.划分数据集
x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,random_state=5)
#3.特征工程
transfer=StandardScaler()
x_train=transfer.fit_transform(x_train)
#对测试集也做训练集相同的标准化处理。 选用同样的标准差以及方差
x_test=transfer.transform(x_test)
#4.KNN算法预估
estimator=KNeighborsClassifier(n_neighbors=9)
estimator.fit(x_train,y_train)
#5.模型评估
#方法一:直接比对真实值与预测值
y_predict=estimator.predict(x_test)
print("y_predict: \n",y_predict)
print("预测结果:\n",y_test==y_predict)
#方法二:计算准确率
score=estimator.score(x_test,y_test)
print("准确率为:\n",score)
return None
3、K-近邻总结
- 优点:
- 简单,易于理解,易于实现,无需训练
- 缺点:
- 懒惰算法,对测试样本分类时的计算量大,内存开销大
- 必须指定K值,K值选择不当则分类精度不能保证
- 使用场景:小数据场景,几千~几万样本,具体场景具体业务去测试