2.2 KNN算法实现
生活随笔
收集整理的這篇文章主要介紹了
2.2 KNN算法实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 源碼下載
下載代碼
?
2 代碼截圖
?
3 KNN代碼實現
import random import math from operator import itemgetter"""定義加載數據函數fileName: 文件名稱split:分割點,將原始數據分為訓練集和測試集trainingData:訓練集testData:測試集 """ def loadData(fileName,split,trainingData,testData):file = open(fileName,'r')lines = file.read()rows = lines.strip('\n').split('\n')for x in range( len(rows) ):row = rows[x].strip(',').split(',')if random.random() < split:trainingData.append(row)else:testData.append(row)""" 得到最近的點 trainingDataList:訓練集 testData:測試集 """ def getNeighbors(trainingDataList,testData,K):dimension = len(testData) - 1distances = []for trainingData in trainingDataList :distance = euclideanDistance(trainingData,testData,dimension)distances.append( ( trainingData,distance) )distances = sorted(distances,key=itemgetter(1) )neighbors = []for x in range(K):neighbors.append(distances[x][0])return neighbors""" 進行投票,小數服從多數 例如 A:3票, B:2票,C:5票 那么結果為 C """ def vote(neighbors):dict = {}for neighbor in neighbors:type = neighbor[ len(neighbor) - 1 ]if type in dict:dict[type] += 1else:dict[type] = 1items = sorted(dict.items(),key=itemgetter(1),reverse=True)return items[0][0]""" 估算兩點之間的歐幾里得距離 point1 : 第一個點 point2 : 第二個點 dimension : 維度,比如 x1(7.5) 維度為1, x2(1,5)維度為2, x3(1,6,32)維度為3 """ def euclideanDistance( point1,point2, dimension):distance = 0for x in range(dimension):distance += pow( float( point1[x] ) - float( point2[x] ) ,2 )return math.sqrt(distance)""" 得到預測的精確度 """ def getAccuracy(forecastList):errorCount = 0for forecast in forecastList:if forecast[1] != forecast[0][-1]:errorCount += 1accuracy = 1 - float( errorCount / len(forecastList) )return accuracy""" main函數 """ def main():trainingDataList = []testDataList = []split = 0.9K = 5fileName = "D:/workspace/MachineLearning/07stage/1-fundamental/01/KNN/irisdata.txt"loadData(fileName,split,trainingDataList,testDataList)forecastList = []for testData in testDataList:neighbors = getNeighbors(trainingDataList,testData,K)voteResult = vote(neighbors)forecastList.append( ( testData,voteResult ) )accuracy = getAccuracy(forecastList)print("準確度:{}% ,錯誤率 : {} %".format( accuracy * 100 , ( 1 - accuracy) * 100 ),) for x in range(100):main()?
總結
以上是生活随笔為你收集整理的2.2 KNN算法实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.2 决策树代码实现
- 下一篇: 2.3 KNN-采用机器学习库来预测鸢尾