#!/usr/bin/env python # coding: utf-8 # # Метрические методы # Шестаков А.В. Майнор по анализу данных 31/05/2016 # Метрические методы классификации и регрессии - одни из самых простых моделей. Они основаны на гипотезе о компактности (непрерывности) - близким объектам соответствуют близкие ответы. # # Дело остаётся за малым: # * Определить, что же такое близкий объект # * Определить, сколько ближайших соседей учитывать при прогнозировании # * Определить как их учитывать? # # Какие недостатки метода kNN вы помните из лекции? # ## Интуиция # ### Классификация # Поиграем с kNN на игружечном датасете # In[ ]: from sklearn.datasets import make_moons import numpy as np import matplotlib.pyplot as plt plt.style.use('ggplot') get_ipython().run_line_magic('matplotlib', 'inline') # In[ ]: X, y = make_moons(noise=0.3, random_state=123) plt.scatter(X[:,0], X[:,1], c=y) # In[ ]: from sklearn.neighbors import KNeighborsClassifier from sklearn.cross_validation import train_test_split knn = KNeighborsClassifier(n_neighbors=5, weights='uniform', metric='minkowski') knn.fit(X, y) # In[ ]: x_range = np.linspace(X.min(), X.max(), 100) xx1, xx2 = np.meshgrid(x_range, x_range) Y = knn.predict_proba(np.c_[xx1.ravel(), xx2.ravel()])[:,1] Y = Y.reshape(xx1.shape) plt.contourf(xx1, xx2, Y, alpha=0.3) plt.scatter(X[:,0], X[:,1],c=y) # ### Регрессия # Загрузите простой [датасет](https://www.dropbox.com/s/ow82e7paghozork/kengo.csv?dl=0) с измерениями носов(?) кенгуру. # *Reference: Australian Journal of Zoology, Vol. 28, p607-613* # In[ ]: data = np.loadtxt('kengo.csv', skiprows=1, delimiter=',') X = data[:,0].reshape(-1,1) y = data[:,1] # In[ ]: plt.scatter(X, y) # In[ ]: from sklearn.neighbors import KNeighborsRegressor # In[ ]: # Your code here # # Задание 1 # ## Регрессия # # Обучите метод ближайшего соседа на данных о стоимости апартаментов в Бостоне.
# С помощью кросс-валидации определите оптимальное количество ближайших соседей и функцию расчета весов ближайших соседей # In[ ]: from sklearn.datasets import load_boston data = load_boston() # In[ ]: print data['DESCR'] # ## Классификация # Загрузите датасет с новостными текстами. Выберите 2 категории, разбейте документы на слова (n-gramm'ы), "обучите" метод ближайшего соседа для задачи категоризации текстов по их содержанию. # # Используйте косинусную мету близости # In[ ]: from sklearn.datasets import fetch_20newsgroups from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfVectorizer # In[ ]: news_docs = fetch_20newsgroups(subset='all', categories=['alt.atheism', 'comp.graphics'])