您的位置:首页 > 运维架构 > 网站架构

13,SKlearn实现KNN算法,约会网站与鸢尾花数据集

2018-05-31 15:10 701 查看
import numpy as np
import matplotlib.pyplot as plt

#约会网站测试数据的分别表示1.每年飞行的里程数,2.玩游戏和看视频占的时间的比,3.每周消费冰淇淋的公升数
raw_data_X=[[54483,6.317292,0.018209],
[18475,12.664194,0.595653],
[33926,2.906644,0.581657],
[43865,2.388241,0.913938],
[26547,6.024471,0.486215],
[44404,7.226764,1.255329],
[16674,4.183997,1.275290],
[8123,11.850211,1.096981],
[42747,11.661797,1.167935]]

#样本标签中1表示不喜欢,2表示魅力一般,3表示极具魅力
raw_data_y=[1,3,1,1,3,3,2,3,3]

X_train=np.array(raw_data_X)
y_train=np.array(raw_data_y)

x=np.array([56054,3.574967,0.494666])

from sklearn.neighbors import KNeighborsClassifier #导入sklearn的相应的模块

kNN_classifier=KNeighborsClassifier(n_neighbors=3) #括号中的3表示k的值

kNN_classifier.fit(X_train,y_train)  #传入训练数据进行拟合

x_predict=x.reshape(1,-1)#对测试的数据先进行修改格式,改为1行,-1表示列自动匹配

kNN_classifier.predict(x_predict) #传入测试,对结果进行进行预测

#array([
4000
1])  查看数据中的结果,发现测试数据测试正确

详情见点击打开链接

https://www.cnblogs.com/xufangming/articles/9041490.html

Iris数据集

Iris flower数据集是1936年由Sir Ronald Fisher引入的经典多维数据集,可以作为判别分析(discriminant analysis)的样本。该数据集包含Iris花的三个品种(Iris setosa, Iris virginica and Iris versicolor)各50个样本,每个样本还有4个特征参数(分别是萼片<sepals>的长宽和花瓣<petals>的长宽,以厘米为单位),Fisher利用这个数据集开发了一个线性判别模型来辨别花朵的品种。
基于Fisher的线性判别模型,该数据集成为了机器学习中各种分类技术的典型实验案例。


#-*-coding:utf-8 -*-
from sklearn import datasets
#导入内置数据集模块
from sklearn.neighbors import KNeighborsClassifier
#导入sklearn.neighbors模块中KNN类
import numpy as np
np.random.seed(0)
#设置随机种子,不设置的话默认是按系统时间作为参数,因此每次调用随机模块时产生的随机数都不一样设置后每次产生的一样
iris=datasets.load_iris()
#导入鸢尾花的数据集,iris是一个类似于结构体的东西,内部有样本数据,如果是监督学习还有标签数据
iris_x=iris.data
#样本数据150*4二维数据,代表150个样本,每个样本4个属性分别为花瓣和花萼的长、宽
iris_y=iris.target
#长150的以为数组,样本数据的标签
indices = np.random.permutation(len(iris_x))
#permutation接收一个数作为参数(150),产生一个0-149一维数组,只不过是随机打乱的,当然她也可以接收一个一维数组作为参数,结果是直接对这个数组打乱
iris_x_train = iris_x[indices[:-10]]
#随机选取140个样本作为训练数据集
iris_y_train = iris_y[indices[:-10]]
#并且选取这140个样本的标签作为训练数据集的标签
iris_x_test  = iris_x[indices[-10:]]
#剩下的10个样本作为测试数据集
iris_y_test  = iris_y[indices[-10:]]
#并且把剩下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,False)
#计算与最后一个测试样本距离在最近的5个点,返回的是这些样本的序号组成的数组
score=knn.score(iris_x_test,iris_y_test,sample_weight=None)
#调用该对象的打分方法,计算出准确率

print('iris_y_predict = ')
print(iris_y_predict)
#输出测试的结果

print('iris_y_test = ')
print(iris_y_test)
#输出原始测试数据集的正确标签,以方便对比
print 'Accuracy:',score
#输出准确率计算结果
print 'neighborpoint of last test sample:',neighborpoint

print 'probility:',probility
***********************************
结果输出:
iris_y_predict =
[1 2 1 0 0 0 2 1 2 0]     #第二个与原数据不同,
iris_y_test =
[1 1 1 0 0 0 2 1 2 0]     #原数据类型
Accuracy: 0.9
neighborpoint of last test sample: [[ 75  41  96  78 123]]
probility: [[ 0.   1.   0. ]
       [ 0.   0.4  0.6]
       [ 0.   1.   0. ]
       [ 1.   0.   0. ]
       [ 1.   0.   0. ]
       [ 1.   0.   0. ]
       [ 0.   0.   1. ]
       [ 0.   1.   0. ]
       [ 0.   0.   1. ]
       [ 1.   0.   0. ]]

详见点击打开链接

https://www.cnblogs.com/xiaotan-code/p/6680438.html


阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: