KNN算法基本原理与sklearn实现

'''
KNN 近邻算法,有监督学习算法
用于分类和回归
思路:
    1.在样本空间中查找 k 个最相似或者距离最近的样本
    2.根据这 k 个最相似的样本对未知样本进行分类
步骤:
    1.对数据进行预处理
        提取特征向量,对原来的数据重新表达
    2.确定距离计算公式
        计算已知样本空间中所有样本与未知样本的距离
    3.对所有的距离按升序进行排列
    4.选取与未知样本距离最小的 k 个样本
    5.统计选取的 k 个样本中每个样本所属类别的出现概率
    6.把出现频率最高的类别作为预测结果,未知样本则属于这个类别
程序要点:
1.创建模型需要用到的包
sklearn.neighbors.KNeighborsClassifier
2.创建模型,k = 3
knn = KNeighborsClassifier(n_neighbors = 3)
    n_neighbors 数值不同,创建的模型不同
3.训练模型,进行拟合
knn.fit(x,y)
    x 为二维列表数据
        x = [[1,5],[2,4],[2.2,5],
             [4.1,5],[5,1],[5,2],[5,3],[6,2],
             [7.5,4.5],[8.5,4],[7.9,5.1],[8.2,5]]
    y 为一维分类数据,将数据分为 0 1 2 三类
        y = [0,0,0,
             1,1,1,1,1,
             2,2,2,2]
4.进行预测未知数据,返回所属类别
knn.predict([[4.8,5.1]])
5.属于不同类别的概率
knn.predict_proba([[4.8,5.1]])
'''
from sklearn.neighbors import KNeighborsClassifier
# 导包
x = [[1,5],[2,4],[2.2,5],
     [4.1,5],[5,1],[5,2],[5,3],[6,2],
     [7.5,4.5],[8.5,4],[7.9,5.1],[8.2,5]]
# 设置分类的数据
y = [0,0,0,
     1,1,1,1,1,
     2,2,2,2]
# 对 x 进行分类,前三个分为 0类,1类和2类
knn = KNeighborsClassifier(n_neighbors=3)
# 创建模型 k = 3
knn.fit(x,y)
# 开始训练模型
'''
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
                     metric_params=None, n_jobs=None, n_neighbors=3, p=2,
                     weights='uniform')
'''
knn.predict([[4.8,5.1]])
# array([1]) 预测 4.8,5.1 在哪一个分组中
knn = KNeighborsClassifier(n_neighbors=9)
# 设置参数 k = 9
knn.fit(x,y)
'''
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
                     metric_params=None, n_jobs=None, n_neighbors=9, p=2,
                     weights='uniform')
'''
knn.predict([[4.8,5.1]])
# array([1])
knn.predict_proba([[4.8,5.1]])
# 属于不同类别的概率
# array([[0.22222222, 0.44444444, 0.33333333]])
# 返回的是在不同组的概率
'''
总结:
     knn = KNeighborsClassifier(n_neighbors=3) 
     使用 KNeighborsClassifier 创建模型 n_neighbors 为 k  
     使用 knn.fit() 进行预测
          第一个参数为 二维列表
          第二个参数为 一维列表
     使用 predict_proba([[num1,num2]])
     查看num1,num2 在模型中出现的概率
'''

2020-04-10

posted @ 2020-04-10 11:28  CodeYaSuo  阅读(834)  评论(0编辑  收藏  举报