機器學習實戰(python)-Ch02KNN-Notes

Chapter2 KNNpython

1.numpy.tile函數

格式:tile(A,reps) 
* A:array_like 
* 輸入的array 
* reps:array_like 
* A沿各個維度重複的次數算法

舉例:A=[1,2] 
1. tile(A,2) 
結果:[1,2,1,2] 
2. tile(A,(2,3)) 
結果:[[1,2,1,2,1,2], [1,2,1,2,1,2]] 
3. tile(A,(2,2,3)) 
結果:[[[1,2,1,2,1,2], [1,2,1,2,1,2]], 
[[1,2,1,2,1,2], [1,2,1,2,1,2]]]數組

reps的數字從後往前分別對應A的第N個維度的重複次數。函數

 

2.numpy.shape函數測試

shape函數是numpy.core.fromnumeric中的函數,它的功能是讀取矩陣的形狀,好比shape[0]就是讀取矩陣第一維度的長度。ui

 

 

3.numpy.sum函數(axis=)spa

python內建函數的sum應該是默認的axis=0 就是普通的相加,當加入axis=1之後就是將一個矩陣的每一行向量相加。code

例如:blog

c = np.array([[0, 2, 1], [3, 5, 6], [0, 1, 1]]) print c.sum() print c.sum(axis=0) print c.sum(axis=1) 結果分別是:19, [3 8 8], [ 3 14  2] #axis=0, 表示列。 #axis=1, 表示行。

 

4.字典的get方法排序

dict.get(key, "NO")

若是key在字典中不存在,返回第二個參數的值,例如這裏返回"NO"

 

5.numpy.argsort函數

array.argsort()返回的是array數組中的值的從小到大的索引

例如x = [2,4,3,1]

注意這裏numpy的數組要用它本身的array函數來定義,不能直接定義數組

 

6. sorted函數

 

a = {'math':98, 'english':100, 'PE':77}
b = sorted(a.iteritems(), key=operator.itemgetter(1), reverse=True)

 

iteritems是循環迭代字典a中的每個key-value對,itemgetter(1)表示排序是根據value的值排序(0則是key),reverse=True表明降序

 

橫軸:每一年飛行里程數  縱軸:玩電子遊戲時間

綠色:不具魅力  藍色:魅力通常  紅色:極具魅力

Helen女士的擇偶標準挺不錯0.0

 

7.numpy.min() numpy.max()

numpy裏的min(0)、max(0) 參數0表示列中取得最小值,而不是選取當前行的最小值,這也是用來處理矩陣的

 

8.使用open(filename)函數時出現錯誤:

File "/Users/qcy/PycharmProjects/MachineLearning/KNN.py", line 109, in img2vector
fr = open(filename)
TypeError: function takes at least 2 arguments (1 given)

這是因爲在from os import * 時,把os.open()函數引入了,從而覆蓋了python的built-in的open()函數,這兩個open()函數使用的方法是不同的。因此只import須要使用的函數就行,改爲from os import listdir

 

總結:KNN這個算法其實挺笨的,它並無真正的使用訓練集訓練出一個模型,而是在測試時直接把測試的矩陣擴大到訓練矩陣的規模,而後作一個距離的計算,取前K個,哪一個類別的歸類多就歸到哪類。這種分類方式準確率還行,可是它運行的時間和佔用的空間可能太過龐大了。 經過這一章也熟悉了使用numpy庫對矩陣進行操做。「KNN另外一個缺陷時它沒法給出任何數據的基礎結構信息,所以咱們也沒法知曉平均實例樣本和典型實例樣本具備什麼特徵。」  (???)

相關文章
相關標籤/搜索