赞
踩
有这样一条河流like that,河流的左边是rich 人家,河流的右边是poor 人家,这时新搬来一家小甲,这个算法是看小甲是有钱人家还是没钱人家。
要解决这个问题,那么就可以说立着他最近的几个人家是富人多还是穷人多就可以判别了,K户人家,最近距离就是欧氏距离或者曼哈顿距离,切比雪夫距离。
这是欧氏距离,在中学都有学过。
advantage: 显而易见的简单以实现,而且对于边界不规则的数据效果较好
disadvantage: 只适合小的数据集,数据不平衡就没法用了肯定就难受了,数据必须标准化因为非富有即贫穷没有中产阶级这一说
- from sklearn import datasets
- from sklearn.neighbors import KNeighborsClassifier
- import numpy as np
- np.random.seed(0)#设置随机种子
- iris=datasets.load_iris()#获取数据
- iris_x=iris.data#数据部分
- iris_y=iris.target#类别区分部分
- randomarr=np.random.permutation(len(iris_x))
- iris_x_train=iris_x[randomarr[:-10]]#训练集数据
- iris_y_train=iris_y[randomarr[:-10]]#训练集标签分类
- iris_x_test=iris_x[randomarr[-10:]]#测试集数据
- iris_y_test=iris_y[randomarr[-10:]]#测试集标签
- knn=KNeighborsClassifier()#定义一个knn对象
- knn.fit(iris_x_train,iris_y_train)#调用训练方法
- iris_y_predict=knn.predict(iris_x_test)#调用预测方法
- probility=knn.predict_proba(iris_x_test)## 计算个测试样本预测的概率值这里我们没有用概率值,但是在实际工作中可能会参考概率值来进行最后结果的筛选,而不是直接使用给出的预测标签
-
- neighborpoint=knn.kneighbors([iris_x_test[-1]],5)# 计算与最后一个测试样本距离最近的5个点,返回的是这些样本的序号组成的数组
- score=knn.score(iris_x_test,iris_y_test,sample_weight=None)# 调用该对象的打分方法,计算出准确率
- print('iris_y_pridict=')
- print(iris_y_predict)
- # 输出测试结果
- print('iris_y_test=')
- # 输出原始测试数据集的正确标签,以方便对比
- print(iris_y_test)
- print('Accuracy',score)
、
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。