#人工生點人工演算法
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小抄 武林秘籍,成為一代宗師調包俠。欲練此功,必先自宮 就算自宮,未必成功 若不自宮,也能成功。傳說江湖 機器學習領域 有兩大派別 一是學術派,該派資歷高,家境好,多為名門世家 學歷高,數學好 重基礎 數學推導和理論知識 一是實踐派,以找人切...