分类算法————K-邻近算法

1、什么是K-近邻算法(KNN)

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

根据你的“邻居”来判断你的类别

若k=1,会很容易受到异常点的影响。k值取得过大,容易受到样本不均衡的影响

2)距离公式

欧式距离:分类算法————K-邻近算法_第1张图片

曼哈顿距离(绝对值) 明可夫斯基距离

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

分类算法————K-邻近算法_第2张图片

3、K-近邻总结

  • 优点:
    • 简单,易于理解,易于实现,无需训练
  • 缺点:
    • 懒惰算法,对测试样本分类时的计算量大,内存开销大
    • 必须指定K值,K值选择不当则分类精度不能保证
  • 使用场景:小数据场景,几千~几万样本,具体场景具体业务去测试

 

你可能感兴趣的:(机器学习,python)