日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python實現KNN近鄰算法

瀏覽:22日期:2022-06-30 18:12:50
示例:《電影類型分類》

獲取數據來源

電影名稱 打斗次數 接吻次數 電影類型 California Man 3 104 Romance He’s Not Really into Dudes 8 95 Romance Beautiful Woman 1 81 Romance Kevin Longblade 111 15 Action Roob Slayer 3000 99 2 Action Amped II 88 10 Action Unknown 18 90 unknown

數據顯示:肉眼判斷電影類型unknown是什么

from matplotlib import pyplot as plt​# 用來正常顯示中文標簽plt.rcParams['font.sans-serif'] = ['SimHei']# 電影名稱names = ['California Man', 'He’s Not Really into Dudes', 'Beautiful Woman', 'Kevin Longblade', 'Robo Slayer 3000', 'Amped II', 'Unknown']# 類型標簽labels = ['Romance', 'Romance', 'Romance', 'Action', 'Action', 'Action', 'Unknown']colors = ['darkblue', 'red', 'green']colorDict = {label: color for (label, color) in zip(set(labels), colors)}print(colorDict)# 打斗次數,接吻次數X = [3, 8, 1, 111, 99, 88, 18]Y = [104, 95, 81, 15, 2, 10, 88]​plt.title('通過打斗次數和接吻次數判斷電影類型', fontsize=18)plt.xlabel('電影中打斗鏡頭出現的次數', fontsize=16)plt.ylabel('電影中接吻鏡頭出現的次數', fontsize=16)​# 繪制數據for i in range(len(X)): # 散點圖繪制 plt.scatter(X[i], Y[i], color=colorDict[labels[i]])​# 每個點增加描述信息for i in range(0, 7): plt.text(X[i]+2, Y[i]-1, names[i], fontsize=14)​plt.show()問題分析:根據已知信息分析電影類型unknown是什么

核心思想:

未標記樣本的類別由距離其最近的K個鄰居的類別決定

距離度量:

一般距離計算使用歐式距離(用勾股定理計算距離),也可以采用曼哈頓距離(水平上和垂直上的距離之和)、余弦值和相似度(這是距離的另一種表達方式)。相比于上述距離,馬氏距離更為精確,因為它能考慮很多因素,比如單位,由于在求協方差矩陣逆矩陣的過程中,可能不存在,而且若碰見3維及3維以上,求解過程中極其復雜,故可不使用馬氏距離

知識擴展

馬氏距離概念:表示數據的協方差距離 方差:數據集中各個點到均值點的距離的平方的平均值 標準差:方差的開方 協方差cov(x, y):E表示均值,D表示方差,x,y表示不同的數據集,xy表示數據集元素對應乘積組成數據集

cov(x, y) = E(xy) - E(x)*E(y)

cov(x, x) = D(x)

cov(x1+x2, y) = cov(x1, y) + cov(x2, y)

cov(ax, by) = abcov(x, y)

協方差矩陣:根據維度組成的矩陣,假設有三個維度,a,b,c

∑ij = [cov(a, a) cov(a, b) cov(a, c) cov(b, a) cov(b,b) cov(b, c) cov(c, a) cov(c, b) cov(c, c)]

算法實現:歐氏距離

編碼實現

# 自定義實現 mytest1.pyimport numpy as np​# 創建數據集def createDataSet(): features = np.array([[3, 104], [8, 95], [1, 81], [111, 15], [99, 2], [88, 10]]) labels = ['Romance', 'Romance', 'Romance', 'Action', 'Action', 'Action'] return features, labels​def knnClassify(testFeature, trainingSet, labels, k): ''' KNN算法實現,采用歐式距離 :param testFeature: 測試數據集,ndarray類型,一維數組 :param trainingSet: 訓練數據集,ndarray類型,二維數組 :param labels: 訓練集對應標簽,ndarray類型,一維數組 :param k: k值,int類型 :return: 預測結果,類型與標簽中元素一致 ''' dataSetsize = trainingSet.shape[0] ''' 構建一個由dataSet[i] - testFeature的新的數據集diffMat diffMat中的每個元素都是dataSet中每個特征與testFeature的差值(歐式距離中差) ''' testFeatureArray = np.tile(testFeature, (dataSetsize, 1)) diffMat = testFeatureArray - trainingSet # 對每個差值求平方 sqDiffMat = diffMat ** 2 # 計算dataSet中每個屬性與testFeature的差的平方的和 sqDistances = sqDiffMat.sum(axis=1) # 計算每個feature與testFeature之間的歐式距離 distances = sqDistances ** 0.5​ ''' 排序,按照從小到大的順序記錄distances中各個數據的位置 如distance = [5, 9, 0, 2] 則sortedStance = [2, 3, 0, 1] ''' sortedDistances = distances.argsort()​ # 選擇距離最小的k個點 classCount = {} for i in range(k): voteiLabel = labels[list(sortedDistances).index(i)] classCount[voteiLabel] = classCount.get(voteiLabel, 0) + 1 # 對k個結果進行統計、排序,選取最終結果,將字典按照value值從大到小排序 sortedclassCount = sorted(classCount.items(), key=lambda x: x[1], reverse=True) return sortedclassCount[0][0]​testFeature = np.array([100, 200])features, labels = createDataSet()res = knnClassify(testFeature, features, labels, 3)print(res)# 使用python包實現 mytest2.pyfrom sklearn.neighbors import KNeighborsClassifierfrom .mytest1 import createDataSet​features, labels = createDataSet()k = 5clf = KNeighborsClassifier(k_neighbors=k)clf.fit(features, labels)​# 樣本值my_sample = [[18, 90]]res = clf.predict(my_sample)print(res)示例:《交友網站匹配效果預測》

數據來源:略

數據顯示

import pandas as pdimport numpy as npfrom matplotlib import pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D​# 數據加載def loadDatingData(file): datingData = pd.read_table(file, header=None) datingData.columns = ['FlightDistance', 'PlaytimePreweek', 'IcecreamCostPreweek', 'label'] datingTrainData = np.array(datingData[['FlightDistance', 'PlaytimePreweek', 'IcecreamCostPreweek']]) datingTrainLabel = np.array(datingData['label']) return datingData, datingTrainData, datingTrainLabel​# 3D圖顯示數據def dataView3D(datingTrainData, datingTrainLabel): plt.figure(1, figsize=(8, 3)) plt.subplot(111, projection='3d') plt.scatter(np.array([datingTrainData[x][0] for x in range(len(datingTrainLabel)) if datingTrainLabel[x] == 'smallDoses']), np.array([datingTrainData[x][1] for x in range(len(datingTrainLabel)) if datingTrainLabel[x] == 'smallDoses']), np.array([datingTrainData[x][2] for x in range(len(datingTrainLabel)) if datingTrainLabel[x] == 'smallDoses']), c='red') plt.scatter(np.array([datingTrainData[x][0] for x in range(len(datingTrainLabel)) if datingTrainLabel[x] == 'didntLike']), np.array([datingTrainData[x][1] for x in range(len(datingTrainLabel)) if datingTrainLabel[x] == 'didntLike']), np.array([datingTrainData[x][2] for x in range(len(datingTrainLabel)) if datingTrainLabel[x] == 'didntLike']), c='green') plt.scatter(np.array([datingTrainData[x][0] for x in range(len(datingTrainLabel)) if datingTrainLabel[x] == 'largeDoses']), np.array([datingTrainData[x][1] for x in range(len(datingTrainLabel)) if datingTrainLabel[x] == 'largeDoses']), np.array([datingTrainData[x][2] for x in range(len(datingTrainLabel)) if datingTrainLabel[x] == 'largeDoses']), c='blue') plt.xlabel('飛行里程數', fontsize=16) plt.ylabel('視頻游戲耗時百分比', fontsize=16) plt.clabel('冰淇凌消耗', fontsize=16) plt.show() datingData, datingTrainData, datingTrainLabel = loadDatingData(FILEPATH1)datingView3D(datingTrainData, datingTrainLabel)問題分析:抽取數據集的前10%在數據集的后90%進行測試

編碼實現

# 自定義方法實現import pandas as pdimport numpy as np​# 數據加載def loadDatingData(file): datingData = pd.read_table(file, header=None) datingData.columns = ['FlightDistance', 'PlaytimePreweek', 'IcecreamCostPreweek', 'label'] datingTrainData = np.array(datingData[['FlightDistance', 'PlaytimePreweek', 'IcecreamCostPreweek']]) datingTrainLabel = np.array(datingData['label']) return datingData, datingTrainData, datingTrainLabel​# 數據歸一化def autoNorm(datingTrainData): # 獲取數據集每一列的最值 minValues, maxValues = datingTrainData.min(0), datingTrainData.max(0) diffValues = maxValues - minValues # 定義形狀和datingTrainData相似的最小值矩陣和差值矩陣 m = datingTrainData.shape(0) minValuesData = np.tile(minValues, (m, 1)) diffValuesData = np.tile(diffValues, (m, 1)) normValuesData = (datingTrainData-minValuesData)/diffValuesData return normValuesData​# 核心算法實現def KNNClassifier(testData, trainData, trainLabel, k): m = trainData.shape(0) testDataArray = np.tile(testData, (m, 1)) diffDataArray = (testDataArray - trainData) ** 2 sumDataArray = diffDataArray.sum(axis=1) ** 0.5 # 對結果進行排序 sumDataSortedArray = sumDataArray.argsort() classCount = {} for i in range(k): labelName = trainLabel[list(sumDataSortedArray).index(i)] classCount[labelName] = classCount.get(labelName, 0)+1 classCount = sorted(classCount.items(), key=lambda x: x[1], reversed=True) return classCount[0][0] ​# 數據測試def datingTest(file): datingData, datingTrainData, datingTrainLabel = loadDatingData(file) normValuesData = autoNorm(datingTrainData) errorCount = 0 ratio = 0.10 total = datingTrainData.shape(0) numberTest = int(total * ratio) for i in range(numberTest): res = KNNClassifier(normValuesData[i], normValuesData[numberTest:m], datingTrainLabel, 5) if res != datingTrainLabel[i]: errorCount += 1 print('The total error rate is : {}n'.format(error/float(numberTest)))​if __name__ == '__main__': FILEPATH = './datingTestSet1.txt' datingTest(FILEPATH)# python 第三方包實現import pandas as pdimport numpy as npfrom sklearn.neighbors import KNeighborsClassifier​if __name__ == '__main__': FILEPATH = './datingTestSet1.txt' datingData, datingTrainData, datingTrainLabel = loadDatingData(FILEPATH) normValuesData = autoNorm(datingTrainData) errorCount = 0 ratio = 0.10 total = normValuesData.shape[0] numberTest = int(total * ratio) k = 5 clf = KNeighborsClassifier(n_neighbors=k) clf.fit(normValuesData[numberTest:total], datingTrainLabel[numberTest:total]) for i in range(numberTest): res = clf.predict(normValuesData[i].reshape(1, -1)) if res != datingTrainLabel[i]: errorCount += 1 print('The total error rate is : {}n'.format(errorCount/float(numberTest)))

以上就是python實現KNN近鄰算法的詳細內容,更多關于python實現KNN近鄰算法的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩在线综合| 久久中文精品| 综合干狼人综合首页| 日韩午夜视频在线| 麻豆成全视频免费观看在线看| 男女男精品网站| 日本一区二区免费高清| 国产高清一区| 欧美一区91| 亚洲1区在线观看| 蜜臀精品久久久久久蜜臀| 欧美特黄一级大片| 在线一区免费| 亚洲影院天堂中文av色| 久久亚洲图片| 国产精品亚洲片在线播放| 久久精品一本| 久久精品国产免费| 狠狠干成人综合网| 美女精品一区二区| 国产91一区| 蜜桃视频在线观看一区| 久久久国产精品网站| 综合激情五月婷婷| 日韩精品亚洲专区在线观看| 免费一级欧美片在线观看网站 | 日本欧美在线看| 亚洲激情婷婷| 精品日韩一区| 日韩中文字幕亚洲一区二区va在线 | 蜜臀va亚洲va欧美va天堂 | 午夜天堂精品久久久久| 久久五月天小说| 伊人久久亚洲影院| 国产亚洲精品久久久久婷婷瑜伽| 欧美日韩国产一区二区三区不卡 | 日本在线视频一区二区| 蜜桃视频一区二区三区在线观看| 激情久久五月| 国产福利资源一区| 久久国产高清| 91成人小视频| 日本中文字幕一区二区| 日韩av有码| 免费视频久久| 国产精品黄网站| 一区在线视频观看| 日本精品国产| 久久精品电影| 国产亚洲在线| 视频一区免费在线观看| 久久不卡国产精品一区二区| 在线精品视频在线观看高清| 蜜桃成人av| 国产精品美女在线观看直播| 1024精品一区二区三区| 亚洲人成精品久久久| 欧美日韩伊人| 日韩欧美激情| 日韩欧美久久| 视频一区二区中文字幕| 一区二区三区国产盗摄| 日韩精品免费一区二区夜夜嗨 | 欧美日一区二区三区在线观看国产免 | 亚洲精一区二区三区| 欧美天堂视频| 在线亚洲欧美| 美女久久久久久| 蘑菇福利视频一区播放| 亚洲天堂久久| 日韩激情精品| 国产一区国产二区国产三区| 手机在线电影一区| 国产成人久久精品麻豆二区| 蜜桃av一区| 日韩毛片网站| 国产精品观看| 国产国产精品| 国产精品蜜月aⅴ在线| 日韩福利一区| 亚洲午夜久久| 国产探花在线精品| 精品国产a一区二区三区v免费| 免费视频一区二区| 免费在线欧美黄色| 亚洲va久久久噜噜噜久久| 日韩成人高清| 99亚洲视频| 中文字幕一区久| 亚洲综合丁香| 国产精品一区高清| 香蕉成人久久| 欧美日韩中文一区二区| 天堂成人国产精品一区| 91精品国产福利在线观看麻豆| 精品资源在线| 国产精品字幕| 天海翼精品一区二区三区| 麻豆精品在线播放| 午夜日韩福利| 亚洲综合电影一区二区三区| 免费在线亚洲欧美| 亚洲精品在线二区| 黄色日韩在线| 91精品国产自产在线丝袜啪| 一区二区视频欧美| 国产成人在线中文字幕| 福利一区二区三区视频在线观看| 亚洲夜间福利| 国产日韩中文在线中文字幕| 国产精选久久| 久久精品二区亚洲w码| 久久av网址| 欧美一区成人| 免费在线看一区| 四虎精品永久免费| 免费日韩精品中文字幕视频在线| 亚洲欧美日韩在线观看a三区 | 精品国产免费人成网站| 在线亚洲观看| 精品国产成人| 色婷婷久久久| 久久国产乱子精品免费女| 天堂俺去俺来也www久久婷婷| 国产亚洲精品久久久久婷婷瑜伽| 久久中文字幕一区二区三区| 天堂日韩电影| 超碰成人av| 日本三级亚洲精品| 亚洲欧美日韩一区在线观看| 日韩国产在线一| 成人亚洲欧美| 日韩在线观看一区| 久久国产精品久久w女人spa| 综合激情网站| 国产欧美综合一区二区三区| 成人片免费看| 影院欧美亚洲| 久久久一本精品| 国产亚洲精品久久久久婷婷瑜伽| 日韩中文字幕亚洲一区二区va在线 | 亚洲乱码视频| 欧美伊人影院| 精品国产成人| 亚洲成人精品| 午夜性色一区二区三区免费视频| 偷拍亚洲精品| 黄色aa久久| 亚洲色诱最新| 国产一区二区三区久久| 999精品在线| 婷婷综合一区| 久久精品播放| 精品一区av| 免费日韩av片| 午夜在线视频一区二区区别| 在线观看视频免费一区二区三区| 亚洲永久精品唐人导航网址| 日韩欧美字幕| 欧美亚洲tv| 欧美激情视频一区二区三区免费 | 水野朝阳av一区二区三区| 欧美交a欧美精品喷水| 精品亚洲a∨一区二区三区18| 久久国际精品| 精品一区二区三区免费看| 日韩中文字幕无砖| 国产一区二区三区日韩精品| 日本aⅴ免费视频一区二区三区| 成人小电影网站| 国产欧美在线| av日韩中文| 日韩1区2区3区| 国产精品毛片在线| 国产高清一区| 欧美日韩国产精品一区二区亚洲| 伊人久久亚洲| 99久久激情| 久久久久久久久99精品大| 麻豆精品蜜桃视频网站| 亚洲成人一区| 久久精品xxxxx| 亚洲女人av| 亚洲深夜福利在线观看| 丝袜美腿亚洲一区二区图片| 香蕉久久99| 午夜一区在线| 亚洲精品乱码久久久久久蜜桃麻豆 | 久久精品动漫| 日本免费在线视频不卡一不卡二| 欧美好骚综合网| 久久麻豆视频| 免费成人性网站| 久久久久网站| 日韩国产欧美三级| 日韩一区精品| 在线综合欧美| 亚洲制服少妇| 国产精品第十页| 亚洲精品福利电影|