day04-K-近邻算法


# coding=utf-8
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler,MinMaxScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split

def knc():
    # 水仙花数据
    # li.data 即为数据的特征值,是二维的
    # li.target 即为数据的目标值
    li = load_iris()

    # 准备数据
    x_train,x_test,y_train,y_test = train_test_split(li.data,li.target,test_size=0.25)

    # 标准化
    ss = StandardScaler()
    x_train = ss.fit_transform(x_train)
    # 需要用训练集的标准来标准化测试集
    x_test = ss.transform(x_test)

    print(x_train[:10])

    # 预测
    knn = KNeighborsClassifier(n_neighbors=4)

    knn.fit(x_train,y_train)

    print("预测的值为:",knn.predict(x_test))
    print("实际的值为:",y_test)
    print("预测的准确率为:",knn.score(x_test,y_test))

    return None

if __name__ == '__main__':
    knc()


结果


[[-0.87970794  0.97328587 -1.29559474 -1.27424663]
 [-0.76085717  0.97328587 -1.2390009  -1.27424663]
 [ 0.78420285 -0.59356448  0.51540821  0.45968149]
 [ 1.85385979 -0.59356448  1.36431584  0.99319784]
 [ 1.25960594  0.07794281  0.68518973  0.45968149]
 [-1.71166333 -0.14589295 -1.35218859 -1.27424663]
 [ 0.54650131 -0.81740025  0.68518973  0.85981875]
 [ 1.0219044  -0.14589295  0.74178357  0.72643967]
 [-1.47396179  0.30177858 -1.29559474 -1.27424663]
 [-0.76085717 -0.81740025  0.11925131  0.32630241]]
预测的值为: [1 2 1 0 2 2 1 2 0 0 1 0 1 1 2 0 2 2 2 1 0 1 0 2 1 1 2 2 0 0 0 1 1 2 0 2 2
 2]
实际的值为: [1 2 2 0 2 2 1 2 0 0 1 0 1 2 2 0 2 2 1 1 0 1 0 2 1 1 2 2 0 0 0 1 1 2 0 2 1
 2]
预测的准确率为: 0.8947368421052632

K-近邻算法
这个算法的思想很简单,使用类似两点之间距离计算的公式来计算训练集中所有的特征值与预测的数据的特征值,计算出其距离,然后选择距离最短的数据,即“邻居”
正是由于这个思路,所以有异常点的话对预测的影响很大,所以需要对数据集进行标准化
k的意思是几个邻居的意思,即几个与之距离最短的数据的目标值
该算法适用于小数据场景,而且算法中的k需要自己去尝试