中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么實現一個KNN算法

發布時間:2021-06-21 18:23:25 來源:億速云 閱讀:155 作者:Leah 欄目:大數據

怎么實現一個KNN算法,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

教你如何自己實現KNN算法

KNN算法,也稱為K鄰近算法,可以解決回歸和分類問題,但解決分類問題才是它的優勢。

KNN算法的本質就是尋找與我們提供的數據相似的k個樣本,然后判斷這k個樣本的標簽,最后統計每個標簽出現的次數,次數最多的標簽,就會被當作我們提供的數據的標簽。

先說說工作流程:

  1. 機器學習是基于數據的,所以要先將實物轉換為向量、矩陣或張量的形式

  2. 通過歐式距離計算出測試樣本與其他樣本之間的距離

  3. 將距離按照小到大排序,并取前K個值

  4. 判斷前K個值相應的標簽,并進行統計

  5. 統計最多的標簽即為預測結果

現在我們來動手實現一下

先導入所有需要導入的庫或模塊

# 導入sklearn自帶的數據集from sklearn import datasets# 導入計數器,用于統計標簽出現的次數from collections import Counter# 用于分割數據集from sklearn.model_selection import train_test_split# 用于計算歐式距離import numpy as np

其次,導入iris數據集,存儲樣本特征和標簽

data = datasets.load_iris()# 將樣本特征存儲到XX = data['data']# 將樣本標簽存儲到YY = data['target']

然后為了后期評估模型,這里將數據集分為訓練集和測試集

X_train,X_test,Y_train,Y_test = train_test_split(X,Y,random_state=2000)

設置random_state為固定值,這樣每次的運行結果就會一樣,幫助我們判斷過程出現的bug

再次,寫一個計算距離的函數eus_dis

def eus_dis(instance1, instance2):    '''計算兩個樣本之間的距離      instance1:array型      instance2:array型    '''    distance = np.sqrt(sum((instance1-instance2)**2))    return distance

接著,真正的開始實現KNN算法

def KnnClassify(X,Y,test,k):    '''實現KNN算法        X:特征訓練集-->array型        Y:標簽訓練集-->array型        test:特征測試集-->array型        k:鄰近值-->int    '''    # 計算樣本之間的距離    distances = [eus_dis(x, test) for x in X]    # 按照從小到大排序,并取前K個值,返回下標    kneighbors = np.argsort(distances)[:k]    # 統計每個標簽出現的次數    count = Counter(Y[kneighbors])    # 返回出現次數最多的標簽    return count.most_common()[0][0]

最后我們來進行測試,觀察其準確率

# 存儲模型對特征測試集的預測結果predirect = [KnnClassify(X_train,Y_train,test,5) for test in X_test]# 計算預測結果與實際結果相等的個數count = np.count_nonzero((predirect==Y_test)==True)print("該模型的預測準確率為:%.3f" % (count/len(X_test)))

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

琼海市| 旌德县| 长兴县| 梧州市| 浏阳市| 新建县| 汉沽区| 札达县| 远安县| 杭锦旗| 邵阳市| 五峰| 上蔡县| 米林县| 绩溪县| 唐河县| 图木舒克市| 兴业县| 大理市| 晴隆县| 商都县| 斗六市| 马边| 宁河县| 咸阳市| 吉隆县| 陆丰市| 临湘市| 岳西县| 唐海县| 屯昌县| 京山县| 海兴县| 鄄城县| 宁海县| 石屏县| 东乡县| 石阡县| 盐山县| 富裕县| 蚌埠市|