sklearn速度複習 knn

2021-09-12 08:28:37 字數 4277 閱讀 6244

#人工生點人工演算法

import matplotlib.pyplot as plt

import numpy as np

import operator

x1 = np.array([3,2,1])#1類點x座標

y1 = np.array([104,100,81])#1類點y座標

x2 = np.array([101,99,98])#2類點x座標

y2 = np.array([10,5,2])#2點點y座標

scatter1 = plt.scatter(x1,y1,c='r')#紅點

scatter2 = plt.scatter(x2,y2,c='b')#藍點

x = np.array([18])# 未知資料1個

y = np.array([90])# 未知資料1個

scatter3 = plt.scatter(x,y,c='k')#黑色

plt.legend(handles=[scatter1,scatter2,scatter3],labels=['labela','labelb','x'],loc='best')#畫圖例

plt.show()#畫圖

x_data = np.array([[3,104],[2,100],[1,81],[101,10],[99,5],[81,2]])#已知分類的資料

y_data = np.array(['a','a','a','b','b','b'])#已知分類資料分類

x_test = np.array([18,90])#示知資料

x_data_size = x_data.shape[0]# 計算樣本數量

np.tile(x_test, (x_data_size,1))# 複製x_test

diffmat = np.tile(x_test, (x_data_size,1)) - x_data# 計算x_test與每乙個樣本的差值

sqdiffmat = diffmat**2# 計算差值的平方

sqdistances = sqdiffmat.sum(axis=1)# 求和

distances = sqdistances**0.5# 開方

sorteddistances = distances.argsort()# 從小到大排序

classcount = {}

k = 5# 設定k

for i in range(k):

votelabel = y_data[sorteddistances[i]] # 獲取標籤

classcount[votelabel] = classcount.get(votelabel,0) + 1 # 統計標籤數量

sortedclasscount = sorted(classcount.items(),key=operator.itemgetter(1), reverse=true)# 根據operator.itemgetter(1)-第1個值對classcount排序,然後再取倒序

knnclass = sortedclasscount[0][0]# 獲取數量最多的標籤

print(knnclass)

//匯入資料人工演算法

import numpy as np

from sklearn import datasets

from sklearn.metrics import classification_report,confusion_matrix

import operator

import random

def knn(x_test, x_data, y_data, k):

x_data_size = x_data.shape[0]# 計算樣本數量

np.tile(x_test, (x_data_size,1))# 複製x_test

diffmat = np.tile(x_test, (x_data_size,1)) - x_data# 計算x_test與每乙個樣本的差值

sqdiffmat = diffmat**2# 計算差值的平方

sqdistances = sqdiffmat.sum(axis=1) # 求和

distances = sqdistances**0.5# 開方

sorteddistances = distances.argsort() # 從小到大排序

classcount = {}

for i in range(k):

votelabel = y_data[sorteddistances[i]] # 獲取標籤

classcount[votelabel] = classcount.get(votelabel,0) + 1# 統計標籤數量

sortedclasscount = sorted(classcount.items(),key=operator.itemgetter(1), reverse=true)# 根據operator.itemgetter(1)-第1個值對classcount排序,然後再取倒序

return sortedclasscount[0][0]# 獲取數量最多的標籤

iris = datasets.load_iris()# 載入資料

# x_train,x_test,y_train,y_test = train_test_split(iris.data, iris.target, test_size=0.2) #分割資料0.2為測試資料,0.8為訓練資料

data_size = iris.data.shape[0]#打亂資料

index = [i for i in range(data_size)]

random.shuffle(index)

iris.data = iris.data[index]

iris.target = iris.target[index]

test_size = 40#切分資料集

x_train = iris.data[test_size:]

x_test = iris.data[:test_size]

y_train = iris.target[test_size:]

y_test = iris.target[:test_size]

predictions =

for i in range(x_test.shape[0]):

print(classification_report(y_test, predictions))

print(confusion_matrix(y_test,predictions))

//匯入資料模板演算法

from sklearn import neighbors

from sklearn import datasets

from sklearn.model_selection import train_test_split

from sklearn.metrics import classification_report

import random

iris = datasets.load_iris()# 載入資料

print(iris)

# 打亂資料切分資料集

# x_train,x_test,y_train,y_test = train_test_split(iris.data, iris.target, test_size=0.2) #分割資料0.2為測試資料,0.8為訓練資料

data_size = iris.data.shape[0]#打亂資料

index = [i for i in range(data_size)]

random.shuffle(index)

iris.data = iris.data[index]

iris.target = iris.target[index]

test_size = 40#切分資料集

x_train = iris.data[test_size:]

x_test = iris.data[:test_size]

y_train = iris.target[test_size:]

y_test = iris.target[:test_size]

model = neighbors.kneighborsclassifier(n_neighbors=3)# 構建模型

model.fit(x_train, y_train)

prediction = model.predict(x_test)

print(classification_report(y_test, prediction))

python運用sklearn實現KNN分類演算法

knn k nearest neighbours classiflication 分類演算法,供大家參考,具體內容如下 最簡單的分類演算法,易於理解和實現 實現步驟 通過選取與該點距離最近的k個樣本,在這k個樣本中哪乙個類別的數量多,就把k歸為哪一類。注意 通過sklearn對資料使用knn演算法進...

sklearn調包俠之KNN演算法

天下武功,唯快不破。今天就正式講解如何通過 sklearn小抄 武林秘籍,成為一代宗師調包俠。欲練此功,必先自宮 就算自宮,未必成功 若不自宮,也能成功。傳說江湖 機器學習領域 有兩大派別 一是學術派,該派資歷高,家境好,多為名門世家 學歷高,數學好 重基礎 數學推導和理論知識 一是實踐派,以找人切...

sklearn調包俠之KNN演算法

天下武功,唯快不破。今天就正式講解如何通過 sklearn小抄 武林秘籍,成為一代宗師調包俠。欲練此功,必先自宮 就算自宮,未必成功 若不自宮,也能成功。傳說江湖 機器學習領域 有兩大派別 一是學術派,該派資歷高,家境好,多為名門世家 學歷高,數學好 重基礎 數學推導和理論知識 一是實踐派,以找人切...