1

Тема: Метод k-найближчих сусідів

Необхідно реалізувати один з методів для вирішення задачі класифікації статистичних даних: метод опорних векторів або ж метод k найближчих сусідів.
В ході роботи потрібно:
• провести візуалізацію вихідних даних у вигляді графіка розсіювання
• сформувати модель даних
• провести навчання моделі
• протестувати модель

Ось код але він не повністю правильний по відношенню до даної задачі, допоможіть будь ласка змінити потрібно

from __future__ import division
import pandas as pd
url = r'https://archive.ics.uci.edu/ml/' \
    'machine-learning-databases/iris/iris.data'
df = pd.read_csv(url, header=None)
df.columns = [u'Sepal.Lenght, cm',
              u'Sepal.Width, cm',
              u'Petal.Lenght, cm',
              u'Petal.Width, cm',
             'Class']
import numpy as np
def test_and_train(df, proportion):
    mask = np.random.rand(len(df)) < proportion
    return df[mask], df[~mask]
train, test = test_and_train(df, 0.67)
 
from math import sqrt
def euclidean_distance(instance1,instance2):
    squares = [(i-j)**2 for i,j in zip(instance1,instance2)]
    return sqrt(sum(squares))
import operator
def get_neighbours(instance, train,k):
    distances = []
    for i in train.ix[:,:-1].values:
        distances.append(euclidean_distance(instance,i))
    distances = tuple(zip(distances, train[u'Class'].values))
    return sorted(distances,key=operator.itemgetter(0))[:k]
 
from collections import Counter
def get_response(neigbours):
    return Counter(neigbours).most_common()[0][0][1]
 
def get_predictions(train, test, k):
    predictions = []
    for i in test.ix[:,:-1].values:
        neigbours = get_neighbours(i,train,k)
        response = get_response(neigbours)
        predictions.append(response)
    return predictions
 
 
 
def mean(instance):
    return sum(instance)/len(instance)
def get_accuracy(test,predictions):
    return mean([i == j for i,j in zip(test[u'Class'].values, predictions)])
get_accuracy(test,get_predictions(train, test, 5))
 
import pylab as pl
from sklearn.neighbors import KNeighborsClassifier
import pylab as pl
variables = [u'Sepal.Lenght, cm',u'Sepal.Width, cm',
              u'Petal.Lenght, cm',u'Petal.Width, cm']
results = []
for n in range(1,51,2):
    clf = KNeighborsClassifier(n_neighbors=n)
    clf.fit(train[variables], train[u'Class'])
    preds = clf.predict(test[variables])
    accuracy = np.where(preds==test[u'Class'], 1, 0).sum() / float(len(test))
    print("Neighbors: %d, Accuracy: %3f" % (n, accuracy))
    results.append([n, accuracy])
results = pd.DataFrame(results, columns=["n", "accuracy"])
pl.plot(results.n, results.accuracy)
pl.title("Accuracy with Increasing K")
pl.show()

2

Re: Метод k-найближчих сусідів

І ви серйозно вважаєте, що хтось візьметься розбирати, чому саме цей код неправильний, коли ви це знаєте, але не хочете нам сказати?

Подякували: ostap34PHP, LoganRoss2

3

Re: Метод k-найближчих сусідів

Якщо ви задаєте таке питання то цей код писали не ви. Краще пробуйте написати свій код.

Подякували: koala1

4

Re: Метод k-найближчих сусідів

Допоможіть, викладач нічого не пояснив і каже, що код не відповідає умові задачі я сам не дуже розбираюся в data maing на python але лабу потрібно здати, допоможіть будь ласка, якщо потрібно то і за винагороду.

5

Re: Метод k-найближчих сусідів

Запропонуйте винагороду викладачеві, так надійніше.