#!/usr/bin/env python # coding: utf-8 # Задача 12. # Предсказать сорт винограда из которого сделано вино, используя результаты химических анализов, c помощью KNN - метода k ближайших соседей с тремя различными метриками. Построить график зависимости величины ошибки от числа соседей k. # In[1]: import sklearn.neighbors import sklearn.model_selection import sklearn.metrics import sklearn.preprocessing import numpy as np import pandas as pd import matplotlib.pyplot as plt get_ipython().run_line_magic('matplotlib', 'inline') # Считывание данных: # In[2]: data=pd.read_csv('wine.data') data.columns = ['Class', 'Alcohol', 'Malic acid', 'Ash', 'Alcalinity of ash', 'Magnesium', 'Total phenols', 'Flavanoids', 'Nonflavanoid phenols', 'Proanthocyanins', 'Color intensity', 'Hue', 'OD/OD of diluted wines', 'Proline '] data[:10] # Обработка данных: # In[3]: wine_data=data[data.columns[data.columns!='Class']] wine_class=data['Class'] # In[4]: neighbours=range(1,20) metrics=['euclidean', 'manhattan', 'chebyshev'] X_train,X_test,y_train,y_test=sklearn.model_selection.train_test_split(wine_data, wine_class,test_size=0.5) # Обучение и подсчет ошибки: # In[5]: error=[] for i in range(3): error.append([]) for k in range(1,20): neighbor = sklearn.neighbors.KNeighborsClassifier(n_neighbors = k, metric= metrics[i]) neighbor.fit(X_train,y_train) predictions = neighbor.predict(X_test) accuracy = sklearn.metrics.accuracy_score(y_test, predictions) error[i].append(1-accuracy) # Построение графика зависимости ошибки от количества соседей для 3 различных метрик # In[6]: plt.figure() for i in range(3): plt.plot(neighbours,error[i], label=metrics[i]) plt.legend() plt.xlabel('Количество соседей') plt.ylabel('Ошибка') plt.show() # Как видно из графика, оптимальные результаты дает Манхэттенская метрика при количестве соседей равном 15.