Python機(jī)器學(xué)習(xí)之scikit-learn庫(kù)中KNN算法的封裝與使用方法
本文實(shí)例講述了Python機(jī)器學(xué)習(xí)之scikit-learn庫(kù)中KNN算法的封裝與使用方法。分享給大家供大家參考,具體如下:
1、工具準(zhǔn)備,python環(huán)境,pycharm
2、在機(jī)器學(xué)習(xí)中,KNN是不需要訓(xùn)練過(guò)程的算法,也就是說(shuō),輸入樣例可以直接調(diào)用predict預(yù)測(cè)結(jié)果,訓(xùn)練數(shù)據(jù)集就是模型。當(dāng)然這里必須將訓(xùn)練數(shù)據(jù)和訓(xùn)練標(biāo)簽進(jìn)行擬合才能形成模型。
3、在pycharm中創(chuàng)建新的項(xiàng)目工程,并在項(xiàng)目下新建KNN.py文件。
import numpy as np from math import sqrt from collections import Counter class KNNClassifier: def __init__(self,k): """初始化KNN分類(lèi)器""" assert k >= 1 """斷言判斷k的值是否合法""" self.k = k self._X_train = None self._y_train = None def fit(self,X_train,y_train): """根據(jù)訓(xùn)練數(shù)據(jù)集X_train和Y_train訓(xùn)練KNN分類(lèi)器,形成模型""" assert X_train.shape[0] == y_train.shape[0] """數(shù)據(jù)和標(biāo)簽的大小必須一樣 assert self.k <= X_train.shape[0] """k的值不能超過(guò)數(shù)據(jù)的大小""" self._X_train = X_train self._y_train = y_train return self def predict(self,X_predict): """必須將訓(xùn)練數(shù)據(jù)集和標(biāo)簽擬合為模型才能進(jìn)行預(yù)測(cè)的過(guò)程""" assert self._X_train is not None and self._y_train is not None """訓(xùn)練數(shù)據(jù)和標(biāo)簽不可以是空的""" assert X_predict.shape[1]== self._X_train.shape[1] """待預(yù)測(cè)數(shù)據(jù)和訓(xùn)練數(shù)據(jù)的列(特征個(gè)數(shù))必須相同""" y_predict = [self._predict(x) for x in X_predict] return np.array(y_predict) def _predict(self,x): """給定單個(gè)待測(cè)數(shù)據(jù)x,返回x的預(yù)測(cè)數(shù)據(jù)結(jié)果""" assert x.shape[0] == self._X_train.shape[1] """x表示一行數(shù)據(jù),即一個(gè)數(shù)組,那么它的特征數(shù)據(jù)個(gè)數(shù),必須和訓(xùn)練數(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對(duì)象。
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這個(gè)矩陣轉(zhuǎn)換成2維的矩陣,一行兩列的矩陣 X_predict = x.reshape(1,-1) """1,創(chuàng)建一個(gè)對(duì)象,設(shè)置K的值為6""" knn_clf = KNNClassifier(6) """2,將訓(xùn)練數(shù)據(jù)和訓(xùn)練標(biāo)簽融合""" knn_clf.fit(X_train,y_train) """3,經(jīng)過(guò)2才能跳到這里,傳入待預(yù)測(cè)的數(shù)據(jù)""" y_predict = knn_clf.predict(X_predict) print(y_predict)
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門(mén)與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- Python機(jī)器學(xué)習(xí)庫(kù)scikit-learn入門(mén)開(kāi)發(fā)示例
- 使用Python和scikit-learn創(chuàng)建混淆矩陣的示例詳解
- Python機(jī)器學(xué)習(xí)工具scikit-learn的使用筆記
- Python機(jī)器學(xué)習(xí)算法庫(kù)scikit-learn學(xué)習(xí)之決策樹(shù)實(shí)現(xiàn)方法詳解
- python機(jī)器學(xué)習(xí)庫(kù)scikit-learn:SVR的基本應(yīng)用
- python的scikit-learn將特征轉(zhuǎn)成one-hot特征的方法
- Python機(jī)器學(xué)習(xí)庫(kù)scikit-learn安裝與基本使用教程
- Python scikit-learn 做線性回歸的示例代碼
- 基于Python和Scikit-Learn的機(jī)器學(xué)習(xí)探索
- Python數(shù)據(jù)分析之使用scikit-learn構(gòu)建模型
相關(guān)文章
OpenCV哈里斯角檢測(cè)|Harris?Corner理論實(shí)踐
這篇文章主要為大家介紹了OpenCV哈里斯角檢測(cè)|Harris?Corner理論實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04淺析Python+OpenCV使用攝像頭追蹤人臉面部血液變化實(shí)現(xiàn)脈搏評(píng)估
這篇文章主要介紹了Python+OpenCV使用攝像頭追蹤人臉面部血液變化實(shí)現(xiàn)脈搏評(píng)估,本文通過(guò)一段代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10Keras load_model 導(dǎo)入錯(cuò)誤的解決方式
這篇文章主要介紹了Keras load_model 導(dǎo)入錯(cuò)誤的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06django Layui界面點(diǎn)擊彈出對(duì)話(huà)框并請(qǐng)求邏輯生成分頁(yè)的動(dòng)態(tài)表格實(shí)例
這篇文章主要介紹了django Layui界面點(diǎn)擊彈出對(duì)話(huà)框并請(qǐng)求邏輯生成分頁(yè)的動(dòng)態(tài)表格實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05python爬蟲(chóng)模擬瀏覽器的兩種方法實(shí)例分析
這篇文章主要介紹了python爬蟲(chóng)模擬瀏覽器的兩種方法,結(jié)合實(shí)例形式分析了Python爬蟲(chóng)模擬瀏覽器的兩種常見(jiàn)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2019-12-12Django Admin中增加導(dǎo)出CSV功能過(guò)程解析
這篇文章主要介紹了Django Admin中增加導(dǎo)出CSV功能過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09Python實(shí)現(xiàn)簡(jiǎn)單狀態(tài)框架的方法
這篇文章主要介紹了Python實(shí)現(xiàn)簡(jiǎn)單狀態(tài)框架的方法,涉及Python狀態(tài)框架的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03Python 70行代碼實(shí)現(xiàn)簡(jiǎn)單算式計(jì)算器解析
這篇文章主要介紹了Python 70行代碼實(shí)現(xiàn)簡(jiǎn)單算式計(jì)算器解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08