рдХреЗрдПрдирдПрди рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░

kNN рдХрд╛ рдЕрд░реНрде k рдирд┐рдХрдЯрддрдо рдкрдбрд╝реЛрд╕реА рдпрд╛ рдХрд╢реНрдореАрд░ рдирд┐рдХрдЯрддрдо рдкрдбрд╝реЛрд╕реА рд╣реИ - рдпрд╣ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡рд░реНрдЧреАрдХрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрднреА-рдХрднреА рдкреНрд░рддрд┐рдЧрдорди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреА рд╕рд░рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЖрдк рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд▓реЗрдЦ рдЕрдЬрдЧрд░ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░рд┐рдпрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрддрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реИред

рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдореЗрдВ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдп рдЕрдкрдиреЗ рдФрдкрдЪрд╛рд░рд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдПрдХ рд╡рд╕реНрддреБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЛ рдПрди-рдЖрдпрд╛рдореА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЖрдпрд╛рдо рдЬрд┐рд╕рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рд╡рд░реНрдгрди рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдореЙрдирд┐рдЯрд░реЛрдВ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╣рдорд╛рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдкреЗрд╕ рдореЗрдВ рдорд╛рдк рдЗрдВрдЪ, рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд, рдЕрдзрд┐рдХрддрдо рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди, рдПрдЪрдбреАрдПрдордЖрдИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рд▓рд╛рдЧрдд, рдЖрджрд┐ рдореЗрдВ рд╡рд┐рдХрд░реНрдг рд╣реЛрдЧрд╛ред рдЧреНрд░рдВрдереЛрдВ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдорд╛рдорд▓рд╛ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рд╡реЗ рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рдЯрд░реНрдо-рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдореИрдЯреНрд░рд┐рдХреНрд╕ ( рдореИрдХрд┐рдирд▓рд░реНрдирд┐рдВрдЧ рдХреЗ рд╡рд┐рд╡рд░рдг) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ))ред

рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░рд┐рдпрд░ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИрдВред рдЗрд╕ рд╕реЗрдЯ рдХреЛ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЕрдВрдХрди рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдзреНрдпрдпрди рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреА рднрд╛рдЧреАрджрд╛рд░реА рдХреЗ рд╕рд╛рдеред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдкреВрд░реНрд╡-рдЗрдХрдЯреНрдареЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдЬрд┐рдХ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЕрдкрдорд╛рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдореЗрдВ, рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рдмрд╛рдд рдкрд░ рдПрдХ рд░рд╛рдп рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдЪрд░реНрдЪрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЕрдкрдорд╛рди рд╣реИ, рдХрд╛рд░реНрдп рд╣реА рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рд╡рд░реНрдЧреАрдХрд░рдг рдХреА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрдЧ (рдмрд╣реБрдХреЛрд╢рд┐рдХреАрдп) рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрдЧ (рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди) рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИред

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо


рдкрд░реАрдХреНрд╖рдг рдирдореВрдиреЗ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП:

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдЕрдЬрдЧрд░ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЙрдирдХреЗ рд╕рд╣реА рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП, рдЕрдЬрдЧрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реБрдиреНрди , рдкрд╛рдЗрд▓реИрдм рдФрд░ рдореИрдЯрдкреНрд▓реЛрдЯрд▓рд┐рдм рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрд░рдВрднреАрдХрд░рдг рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
import random import math import pylab as pl import numpy as np from matplotlib.colors import ListedColormap 


рд╕реНрд░реЛрдд рдбреЗрдЯрд╛


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдХреЗ рдХрд╛рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕ рдкрд░ рдкреНрд░рдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ:
 #Train data generator def generateData (numberOfClassEl, numberOfClasses): data = [] for classNum in range(numberOfClasses): #Choose random center of 2-dimensional gaussian centerX, centerY = random.random()*5.0, random.random()*5.0 #Choose numberOfClassEl random nodes with RMS=0.5 for rowNum in range(numberOfClassEl): data.append([ [random.gauss(centerX,0.5), random.gauss(centerY,0.5)], classNum]) return data 

рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рджреЛ-рдЖрдпрд╛рдореА рд╕реНрдерд╛рди рдЪреБрдирд╛, рдЬрд┐рд╕рдореЗрдВ 0.5 рдХреЗ рдорд╛рдирдХ рд╡рд┐рдЪрд▓рди рдХреЗ рд╕рд╛рде рдПрдХ рджреЛ-рдЖрдпрд╛рдореА рдЧрд╛рдКрд╕реА рдХреЗ рдЧрдгрд┐рддреАрдп рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рд╕реНрдерд╛рди рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде 0 рд╕реЗ 5 рддрдХ рдХреЗ рдЦрдВрдб рдкрд░ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИред рдорд╛рди 0.5 рдХреЛ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рдПрдВ ( рддреАрди рд╕рд┐рдЧреНрдорд╛ рдХрд╛ рдирд┐рдпрдо )ред
рдкрд░рд┐рдгрд╛рдореА рдЪрдпрди рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 def showData (nClasses, nItemsInClass): trainData = generateData (nItemsInClass, nClasses) classColormap = ListedColormap(['#FF0000', '#00FF00', '#FFFFFF']) pl.scatter([trainData[i][0][0] for i in range(len(trainData))], [trainData[i][0][1] for i in range(len(trainData))], c=[trainData[i][1] for i in range(len(trainData))], cmap=classColormap) pl.show() showData (3, 40) 

рдЗрд╕ рдХреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдЙрддреНрдкрдиреНрди рдЫрд╡рд┐ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:


рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдирдореВрдиреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм рд╣рдореЗрдВ рдЗрд╕ рд╕реЗрдЯ рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрдпрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЪрдпрдиред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
 #Separate N data elements in two parts: # test data with N*testPercent elements # train_data with N*(1.0 - testPercent) elements def splitTrainTest (data, testPercent): trainData = [] testData = [] for row in data: if random.random() < testPercent: testData.append(row) else: trainData.append(row) return trainData, testData 


рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди


рдЕрдм, рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдирдореВрдирд╛ рд╣реЛрдиреЗ рдкрд░, рд╣рдо рд╡рд░реНрдЧреАрдХрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЛ рд╕реНрд╡рдпрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
 #Main classification procedure def classifyKNN (trainData, testData, k, numberOfClasses): #Euclidean distance between 2-dimensional point def dist (a, b): return math.sqrt((a[0] - b[0])**2 + (a[1] - b[1])**2) testLabels = [] for testPoint in testData: #Claculate distances between test point and all of the train points testDist = [ [dist(testPoint, trainData[i][0]), trainData[i][1]] for i in range(len(trainData))] #How many points of each class among nearest K stat = [0 for i in range(numberOfClasses)] for d in sorted(testDist)[0:k]: stat[d[1]] += 1 #Assign a class with the most number of occurences among K nearest neighbours testLabels.append( sorted(zip(stat, range(numberOfClasses)), reverse=True)[0][1] ) return testLabels 

рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рди рдХреЗрд╡рд▓ рдпреВрдХреНрд▓рд┐рдбрд┐рдпрди рджреВрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдореИрдирд╣рдЯреНрдЯрди рджреВрд░реА, рдХреЛрд╕рд╛рдЗрди рдорд╛рдк, рдкрд┐рдпрд░реНрд╕рди рдХреЗ рд╕рд╣рд╕рдВрдмрдВрдз рдорд╛рдирджрдВрдб, рдЖрджрд┐ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдирд┐рд╖реНрдкрд╛рджрди рдЙрджрд╛рд╣рд░рдг


рдЕрдм рдЖрдк рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдХрд┐рддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдЗрд╕реЗ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг рдирдореВрдиреЗ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдкрд░реАрдХреНрд╖рдг рдирдореВрдиреЗ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВрдЧреЗ:
 #Calculate classification accuracy def calculateAccuracy (nClasses, nItemsInClass, k, testPercent): data = generateData (nItemsInClass, nClasses) trainData, testDataWithLabels = splitTrainTest (data, testPercent) testData = [testDataWithLabels[i][0] for i in range(len(testDataWithLabels))] testDataLabels = classifyKNN (trainData, testData, k, nClasses) print "Accuracy: ", sum([int(testDataLabels[i]==testDataWithLabels[i][1]) for i in range(len(testDataWithLabels))]) / float(len(testDataWithLabels)) 

рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрд╛рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд╡рд┐рдХреА

рдЕрдм рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдмрдиреА рд╣реБрдИ рд╣реИ: рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЛ рдЧреНрд░рд╛рдлрд┐рдХ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдирд╛ред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ 3 рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ 40 рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд▓рд┐рдП k рдХрд╛ рдореВрд▓реНрдп рддреАрди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред





рдЗрди рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
 #Visualize classification regions def showDataOnMesh (nClasses, nItemsInClass, k): #Generate a mesh of nodes that covers all train cases def generateTestMesh (trainData): x_min = min( [trainData[i][0][0] for i in range(len(trainData))] ) - 1.0 x_max = max( [trainData[i][0][0] for i in range(len(trainData))] ) + 1.0 y_min = min( [trainData[i][0][1] for i in range(len(trainData))] ) - 1.0 y_max = max( [trainData[i][0][1] for i in range(len(trainData))] ) + 1.0 h = 0.05 testX, testY = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) return [testX, testY] trainData = generateData (nItemsInClass, nClasses) testMesh = generateTestMesh (trainData) testMeshLabels = classifyKNN (trainData, zip(testMesh[0].ravel(), testMesh[1].ravel()), k, nClasses) classColormap = ListedColormap(['#FF0000', '#00FF00', '#FFFFFF']) testColormap = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAAA']) pl.pcolormesh(testMesh[0], testMesh[1], np.asarray(testMeshLabels).reshape(testMesh[0].shape), cmap=testColormap) pl.scatter([trainData[i][0][0] for i in range(len(trainData))], [trainData[i][0][1] for i in range(len(trainData))], c=[trainData[i][1] for i in range(len(trainData))], cmap=classColormap) pl.show() 


рдирд┐рд╖реНрдХрд░реНрд╖


рдХреЗрдПрдирдПрди рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡рд░реНрдЧреАрдХрд░рдг рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдХреНрд╕рд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рдЕрдкреНрд░рднрд╛рд╡реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд░реНрдЧреАрдХрд░рдг рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдХреНрд▓рд╛рд╕рд┐рдлрд╝рд╛рдпрд░ рдХреА рд╕рдорд╕реНрдпрд╛ рд╡рд░реНрдЧреАрдХрд░рдг рдХреА рдЧрддрд┐ рд╣реИ: рдпрджрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗрдЯ рдореЗрдВ рдПрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдЯреЗрд╕реНрдЯ рд╕реЗрдЯ рдореЗрдВ рдПрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ рдЕрдВрддрд░рд┐рдХреНрд╖ рдЖрдпрд╛рдо рдХреЗ рд╣реИрдВ, рддреЛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдирдореВрдиреЗ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдУ (рдХреЗ * рдПрдо * рдПрди) рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрдорд╛рдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП kNN рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред

рд╕рдВрджрд░реНрдн


1. Machinelearning.ru рдкрд░ рдирд┐рдХрдЯрддрдо рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреА рд╡рд┐рдзрд┐
2. Machinelearning.ru рдкрд░ рд╡реЗрдХреНрдЯрд░ рдореЙрдбрд▓
3. рд╕реВрдЪрдирд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдкрд░ рдкреБрд╕реНрддрдХ
4. рд╢рд┐рдХ-рд╕реАрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдирд┐рдХрдЯрддрдо рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреА рдкрджреНрдзрддрд┐ рдХрд╛ рд╡рд┐рд╡рд░рдг
5. "рд╕рд╛рдореВрд╣рд┐рдХ рдорди рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ" рдкреБрд╕реНрддрдХ

Source: https://habr.com/ru/post/In149693/


All Articles