import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot')
plt.rcParams['figure.figsize'] = (12,8)
# Для кириллицы на графиках
font = {'family': 'Verdana',
'weight': 'normal'}
plt.rc('font', **font)
try:
from ipywidgets import interact, IntSlider, fixed
from utils import *
except ImportError:
print u'Так надо'
Вспомним теоретическую базу метода kNN.
Задачи:
Вход: Обучающая выборка $X=(x_i,y_i)$, мера близости $d(\cdot, \cdot)$ и объект $\tilde{x}$
Найти $k$ ближайших объекта в $X$ c помощью $d(\tilde{x},\cdot)$
x_true = np.arange(-5, 5, 0.2)
x = x_true + np.random.rand(x_true.shape[0]) - 0.5
y_true = np.sin(x_true)+x_true/3
y = y_true + np.random.rand(x_true.shape[0]) - 0.5
plt.plot(x_true, y_true, c='g', label='$f(x)$')
plt.scatter(x, y, label='actual data')
plt.xlabel('x')
plt.ylabel('y')
plt.legend(loc=2)
try:
plot_linreg(x_true, y_true, x, y)
except:
print u'Смотрите на доску'
try:
fig = interact(plot_knn,
x_true=fixed(x_true), y_true=fixed(y_true), x=fixed(x), y=fixed(y),
k=IntSlider(min=1, max=10, value=1))
except:
print u'Увы, вновь на доске'
from sklearn.neighbors import KNeighborsRegressor
## Разбираемся
from sklearn.datasets import make_moons
X_moons, y_moons = make_moons(noise=0.3, random_state=1234)
plt.scatter(X_moons[:,0], X_moons[:,1], c=y_moons, s=200)
plt.xlabel('$x_1$')
plt.ylabel('$x_2$')
try:
fig = interact(plot_knn_class,
X_moons=fixed(X_moons), y_moons=fixed(y_moons),
k=IntSlider(min=1, max=10, value=1))
except:
print u'Доскааааа'
Попробуйте сами нарисовать такой график. С этим вам могут помочь функции np.meshgrid()
и plt.contourf()
from sklearn.neighbors import KNeighborsClassifier
## Your code here
Вход: Обучающая выборка $X=(x_i,y_i)$, мера близости $d(\cdot, \cdot)$ и объект $\tilde{x}$
Найти $k$ ближайших объекта в $X$ c помощью $d(\tilde{x},\cdot)$
Реализуйте взвешенный kNN с гауссовским ядром для предыдущей задачи
## Your code here
Есть довольно известный набор данных о стоимости домов в штате Калифорния.
Каждое домохозяйство (дом) описывается рядом признаков. Требуется найти зависимость между этими признаками и стоимостью дома.
from sklearn.datasets import fetch_california_housing
data = fetch_california_housing()
X = data.data
y = data.target
print data.DESCR
# Возьмем подвыборку
lllat, lllon = 33, -125
urlat, urlon = 42, -114
idx = (X[:, -1] <= urlon) & (X[:, -1] >= lllon) &\
(X[:, -2] <= urlat) & (X[:, -2] >= lllat)
X = X[idx]
y = y[idx]
# Нарисуем это дело
plt.figure(figsize=(10, 10))
try:
import mpl_toolkits.basemap as bm
m = bm.Basemap(
llcrnrlon=lllon,
llcrnrlat=lllat,
urcrnrlon=urlon,
urcrnrlat=urlat,
projection='merc',
resolution='h'
)
m.drawcoastlines(linewidth=0.5)
m.drawmapboundary(fill_color='#47A4C9', zorder=1)
m.fillcontinents(color='#EBC4D8',lake_color='#47A4C9', zorder=2)
parallels = np.linspace(lllat, urlat, 10)
m.drawparallels(parallels,labels=[1,0,0,0],fontsize=10)
# draw meridians
meridians = np.linspace(lllon, urlon, 10)
m.drawmeridians(meridians,labels=[0,0,0,1],fontsize=10)
m.scatter(X[:, -1], X[:, -2], latlon=True, cmap=plt.cm.hot,
zorder=3, lw=0, c=y)
except ImportError:
print u'Не судьба =('
plt.scatter(X[:, -1], X[:, -2], cmap=plt.cm.hot, c=y)
Будем использовать только геолокацию домов в качестве признаков.
k
от 1 до 15, выведите на графике ошибку при каждом k
на обучающей и контрольной выборкеk
. Является ли результат при этом k
лучшим на контрольной выборке?### Your code here