1. 程式人生 > 其它 >【Python環境】監督學習之KNN演算法

【Python環境】監督學習之KNN演算法

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)載入資料

>>> from sklearn import datasets
>>> iris = datasets.load_iris()

說明:在0.9版中(2011年9月發行),scikit-learn的匯入路徑從scikits.learn更改為sklearn。

(2)資料.data項

>>> iris.data.shape(150, 4)

說明:

資料儲存在.data項中,是一個(n_samples, n_features)陣列。

(3)資料.target項

>>> iris.target.shape(150,)

說明:

每個觀察物件的種類存貯在資料集的.target屬性中。這是一個長度為n_samples的整數一維陣列。

(4)numpy包

>>> 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分類示例

>>> 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)訓練集和測試集

>>> 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