Python機器學習之scikit-learn庫中KNN算法的封裝與使用方法
本文實例講述了Python機器學習之scikit-learn庫中KNN算法的封裝與使用方法。分享給大家供大家參考,具體如下:
1、工具準備,python環(huán)境,pycharm
2、在機器學習中,KNN是不需要訓練過程的算法,也就是說,輸入樣例可以直接調用predict預測結果,訓練數(shù)據(jù)集就是模型。當然這里必須將訓練數(shù)據(jù)和訓練標簽進行擬合才能形成模型。

3、在pycharm中創(chuàng)建新的項目工程,并在項目下新建KNN.py文件。
import numpy as np
from math import sqrt
from collections import Counter
class KNNClassifier:
def __init__(self,k):
"""初始化KNN分類器"""
assert k >= 1
"""斷言判斷k的值是否合法"""
self.k = k
self._X_train = None
self._y_train = None
def fit(self,X_train,y_train):
"""根據(jù)訓練數(shù)據(jù)集X_train和Y_train訓練KNN分類器,形成模型"""
assert X_train.shape[0] == y_train.shape[0]
"""數(shù)據(jù)和標簽的大小必須一樣
assert self.k <= X_train.shape[0]
"""k的值不能超過數(shù)據(jù)的大小"""
self._X_train = X_train
self._y_train = y_train
return self
def predict(self,X_predict):
"""必須將訓練數(shù)據(jù)集和標簽擬合為模型才能進行預測的過程"""
assert self._X_train is not None and self._y_train is not None
"""訓練數(shù)據(jù)和標簽不可以是空的"""
assert X_predict.shape[1]== self._X_train.shape[1]
"""待預測數(shù)據(jù)和訓練數(shù)據(jù)的列(特征個數(shù))必須相同"""
y_predict = [self._predict(x) for x in X_predict]
return np.array(y_predict)
def _predict(self,x):
"""給定單個待測數(shù)據(jù)x,返回x的預測數(shù)據(jù)結果"""
assert x.shape[0] == self._X_train.shape[1]
"""x表示一行數(shù)據(jù),即一個數(shù)組,那么它的特征數(shù)據(jù)個數(shù),必須和訓練數(shù)據(jù)相同
distances = [sqrt(np.sum((x_train - x)**2))for x_train in self._X_train]
nearest = np.argsort(distances)
topk_y = [self._y_train[i] for i in nearest[:self.k]]
votes = Counter(topk_y)
return votes.most_common(1)[0][0]
4、新建test.py文件,引入KNNClassifier對象。
from KNN.py import KNNClassifier
raw_data_x = [[3.393,2.331],
[3.110,1.781],
[1.343,3.368],
[3.582,4.679],
[2.280,2.866],
[7.423,4.696],
[5.745,3.533],
[9.172,2.511],
[7.792,3.424],
[7.939,0.791]]
raw_data_y = [0,0,0,0,0,1,1,1,1,1]
X_train = np.array(raw_data_x)
y_train = np.array(raw_data_y)
x = np.array([9.880,3.555])
# 要將x這個矩陣轉換成2維的矩陣,一行兩列的矩陣
X_predict = x.reshape(1,-1)
"""1,創(chuàng)建一個對象,設置K的值為6"""
knn_clf = KNNClassifier(6)
"""2,將訓練數(shù)據(jù)和訓練標簽融合"""
knn_clf.fit(X_train,y_train)
"""3,經過2才能跳到這里,傳入待預測的數(shù)據(jù)"""
y_predict = knn_clf.predict(X_predict)
print(y_predict)
更多關于Python相關內容感興趣的讀者可查看本站專題:《Python數(shù)學運算技巧總結》、《Python數(shù)據(jù)結構與算法教程》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經典教程》
希望本文所述對大家Python程序設計有所幫助。
- Python機器學習庫scikit-learn入門開發(fā)示例
- 使用Python和scikit-learn創(chuàng)建混淆矩陣的示例詳解
- Python機器學習工具scikit-learn的使用筆記
- Python機器學習算法庫scikit-learn學習之決策樹實現(xiàn)方法詳解
- python機器學習庫scikit-learn:SVR的基本應用
- python的scikit-learn將特征轉成one-hot特征的方法
- Python機器學習庫scikit-learn安裝與基本使用教程
- Python scikit-learn 做線性回歸的示例代碼
- 基于Python和Scikit-Learn的機器學習探索
- Python數(shù)據(jù)分析之使用scikit-learn構建模型
相關文章
keras 實現(xiàn)輕量級網絡ShuffleNet教程
這篇文章主要介紹了keras 實現(xiàn)輕量級網絡ShuffleNet教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python寫UI自動化之playwright(點擊操作)詳解
這篇文章主要介紹了Playwright庫中click()方法的參數(shù)及其使用場景,包括選擇器、修飾鍵、點擊位置、鼠標按鈕、點擊次數(shù)、延遲、超時、強制點擊、試點擊和不等待導航等選項,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2025-02-02

