【Python环境】监督学习之KNN算法

2018-02-27 11:52:46 浏览数 (1)

1、ipython是一个python的交互式shell,比默认的python shell好用得多,支持变量自动补全,自动缩进,支持bash shell命令,内置了许多很有用的功能和函数。在ubuntu下只要sudo apt-get install ipython 就装好了,通过ipython启动。

2、iris.csv数据集以鸢尾花的特征作为数据来源,数据集包含150个数据集,分为3类[山鸢尾(Iris setosa)、变色鸢尾(Iris versicolor)和维吉尼亚鸢尾(Iris virginica)],每类50个数据,每个数据包含4个属性[萼片长度(sepal length),萼片宽度(sepal width),花瓣长度(petal length),花瓣宽度(petal width)],是在数据挖掘、数据分类中非常常用的测试集、训练集。

(1)加载数据

代码语言:javascript复制
>>> from sklearn import datasets
>>> iris = datasets.load_iris()

说明:在0.9版中(2011年9月发行),scikit-learn的导入路径从scikits.learn更改为sklearn。

(2)数据.data项

代码语言:javascript复制
>>> iris.data.shape(150, 4)

说明:

数据存储在.data项中,是一个(n_samples, n_features)数组。

(3)数据.target项

代码语言:javascript复制
>>> iris.target.shape(150,)

说明:

每个观察对象的种类存贮在数据集的.target属性中。这是一个长度为n_samples的整数一维数组。

(4)numpy包

代码语言:javascript复制
>>> import numpy as np
>>> np.unique(iris.target)
array([0, 1, 2])

说明:

  • numpy是一个用python实现的科学计算包。包括:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C 和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。
  • SciPy是一个开源的Python算法库和数学工具包。SciPy包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。与其功能相类似的软件还有MATLAB、GNU Octave和Scilab。

3、K最近邻(KNN)分类器

(1)KNN分类示例

代码语言:javascript复制
>>> from sklearn import neighbors
>>> knn = neighbors.KNeighborsClassifier()
>>> knn.fit(iris.data, iris.target)
KNeighborsClassifier(algorithm='auto', leaf_size=30, n_neighbors=5, p=2,
           warn_on_equidistant=True, weights='uniform')
>>> knn.predict([[0.1, 0.2, 0.3, 0.4]])
array([0])
>>> knn.predict([[0.1, 0.2, 0.3, 0.4], [0.5, 0.6, 0.7, 0.8]])
array([0, 0])

说明:

邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法可以说是整个数据挖掘分类技术中最简单的方法了。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用她最接近的k个邻居来代表。

(2)训练集和测试集

代码语言:javascript复制
>>> perm = np.random.permutation(iris.target.size)
>>> iris.data = iris.data[perm]
>>> iris.target = iris.target[perm]
>>> knn.fit(iris.data[:100], iris.target[:100]) 
KNeighborsClassifier(algorithm='auto', leaf_size=30, n_neighbors=5, p=2,
           warn_on_equidistant=True, weights='uniform')
>>> knn.score(iris.data[:100], iris.target[:100])0.97999999999999998
C:Python27libsite-packagessklearnneighborsclassification.py:131: NeighborsWarning: kneighbors: 
neighbor k 1 and neighbor k have the same distance: results will be dependent on data order.
  neigh_dist, neigh_ind = self.kneighbors(X)

4、参考文件

[1] SciPy:http://zh.wikipedia.org/wiki/SciPy [2] numpy:http://baike.baidu.com/link?url=6R01gFAVWdH2zEDmVnn6dW06E7g4mQPeWf4eVQ-Uk1fsQynEQfMDiB6Cwfs8jyI6mpn6IyK4fBCdG-4Uezcqeq [3] Iris数据集/Iris Data Set的基本介绍:http://blog.sina.com.cn/s/blog_4936c31d0100p54i.html [4] Scikit Learn: 在python中机器学习:http://my.oschina.net/u/175377/blog/84420#OSC_h4_3 [5] 邻近算法:http://baike.baidu.com/link?url=56eMYTCNC6ZJsKggC-BtYWKwanH2eND04UBVG8w5vyks8M1IwpPTPJTQjvQ3fAMndCFvU_wJryC1d3ohkj

0 人点赞