人工智慧原理(一)——KNN最近鄰網路實現
阿新 • • 發佈:2018-12-11
一 目標:在不呼叫除了numpy之外的高階庫的情況下使用KNN最近鄰演算法實現對句子的分類和迴歸
二 演算法原理
最簡單最初級的分類器是將全部訓練資料的類別都記錄下來,如果測試物件的屬性和某個訓練物件的屬性完全匹配,就可以進行分類。顯然,絕大部分測試物件都不會有完全匹配的訓練物件,所以就產生了KNN
KNN是通過不同樣本在特徵空間中的距離進行分類。其思路是:如果一個樣本在特徵空間中存在k個距離最近的訓練物件,則在這k個物件的分類結果中取眾數作為分類器的結果;如果要實現的是迴歸預測,那麼就用各個樣本的結果除以距離(或者其他某種與距離反相關的方法)再求和
三 實驗資料
1、 訓練集:作為樣本用於與測試物件進行匹配
2、 驗證集:用於尋找合適的度量空間 ,比如歐氏距離、曼哈頓距離、餘弦距離等
3、 測試集:用於測試結果
五 部分關鍵程式碼(以迴歸為例)
def findNearest(k, expon, train_mat, vec): tmp = [] for index in range(train_mat.shape[0]): dis = getDis(expon, vec, train_mat[index]) tmp.append((dis, index)) tmp.sort() return tmp[0:k] def calculator(k, l, train_emo, emo, i): for index in range(k): for Index in range(6): emo[i][Index] += train_emo[l[index][1]][Index] / l[index][0] # 歸一化 s = emo[i].sum() for index in range(6): emo[i][index] = emo[i][index] / s def getPredict(k, expon, train_mat, train_emo, valid_mat, valid_emo): l = [] for i in range(valid_mat.shape[0]): l = findNearest(k, expon, train_mat, valid_mat[i]) if l[0][0] == 0: valid_emo[i] = train_emo[l[0][1]] else: calculator(k, l, train_emo, valid_emo, i)