1. 程式人生 > >機器學習—python+sklearn實現KNN&KD樹演算法

機器學習—python+sklearn實現KNN&KD樹演算法

python+sklearn實現KNN及KD樹演算法

from sklearn import datasets# 匯入內建資料集模組
from sklearn.neighbors import KNeighborsClassifier# 匯入sklearn.neighbors模組中KNN類
import numpy as np
from sklearn.neighbors import KDTree#匯入KD樹類

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[0].reshape(1,-1),n_neighbors=1,return_distance=True)# 計算與最後一個測試樣本距離在最近的5個點,返回的是這些樣本的序號組成的陣列
score = knn.score(iris_x_test, iris_y_test, sample_weight=None)# 呼叫該物件的打分方法,計算出準確率

tree = KDTree(iris_x_train)
# ind:最近的3個鄰居的索引
# dist:距離最近的3個鄰居
X = iris_x_train[0].reshape(1,-1)
dist, ind = tree.query(X, k=3)

print ('ind:',ind)
print ('dist:',dist)



# np.random.seed(0)
# X = np.array([(2, 3), (5, 4), (9, 6), (4, 7), (8, 1), (7, 2)])
# tree = KDTree(X, leaf_size=2)