赞
踩
我的理解:
将一块磁铁放在一堆分散的不同颜色的铁块中, 算法中的参数用于设定磁铁可以吸附铁块的个数,肯定是从最近位置的铁块开始吸引.
当参数为1时,只吸引一个铁块,因此这个铁块是什么颜色, 那么这块磁铁就标记成什么颜色.
当参数为N时,会吸附N个铁块, 不同颜色的铁块都会吸附过来,以最多颜色的铁块来标记磁铁的颜色.
磁铁就好比新数据, 铁块就好建模用的数据样本.
K邻近算法使用建议:
对于复杂模型产生的数据,应当使K尽量小, 因为复杂模型的数据已经足够精准,扩大K势必降低其精确度.
反之,针对简单模型,因为数据太含糊不清,应尽量使K大一些,多一些参考数据来决定最终数据类型.
在K邻近算法中,当使用>1个近邻时,虽然可以通过程序来判断新数据的类别,那么怎么能通过人眼直观的判断数据的类别呢?
书中使用了决策边界, 就想地图中的国界线, 同类数据的底色会被标记成一种颜色,混在在一起的那些数据,根据指定的近邻数也会出区分出决策边界的位置.
书中的代码
import matplotlib.pyplot as plt import mglearn from sklearn.neighbors import KNeighborsClassifier x, y = mglearn.datasets.make_forge() fig, axes = plt.subplots(1, 3, figsize=(10, 3)) for n_neighbors, ax in zip([1, 3, 9], axes): clf = KNeighborsClassifier(n_neighbors=n_neighbors).fit(x, y) mglearn.plots.plot_2d_separator(clf, x, fill=True, eps=0.5, ax=ax, alpha=.4) mglearn.discrete_scatter(x[:, 0],x[:, 1], y, ax=ax) ax.set_title("{} neighbors".format(n_neighbors)) ax.set_xlabel("feature 0") ax.set_ylabel("feature 1") axes[0].legend(loc=3) plt.show()
效果图, 可以明显的看到边界位置了.
# 绘图包
import matplotlib.pyplot as plt
# 配色方案包,这里有一些简单的数据样本可以直接使用
# 我理解: 因为重点是图形表示,所以使用图形包中的数据样本能来的快些,因此没有使用sklearn.datasets的数据
import mglearn
# K邻近算法
from sklearn.neighbors import KNeighborsClassifier
# 实例话数据源
x, y = mglearn.datasets.make_forge()
要说明subplots还得先从subplot说起.
subplot返回的一个绘图对象, 是显示在画布基础上的.
import matplotlib.pyplot as plt
import mglearn
# 实例话数据源
x, y = mglearn.datasets.make_forge()
# sbuplot设置的三个接口粉分别是 row, column,index
# 画布的背景大小为 row * column的矩阵大小
# index表示返回的是这个矩阵中的第几个画布, index从1开始, index的取值范围 [>1 and < row*column]
pt = plt.subplot(1, 2, 1)
pt.scatter(x[:, 0], y, s=50, marker='x', label='featrue1')
pt.legend()
plt.show()
效果图:
换个位置试试:
subplots是在subplot的基础上返回两个对象
#创建画布
# axes
# 是个数组 [axes[0], axes[1],.....]
# 如果想设置画布,直接通过数组下标设置就行, 比如: 第二块画布为axe_2 = axes[1]
fig, axes = plt.subplots(1, 3, figsize=(10, 3))
如果使用subplot来做的话,类似下面这样
创建2个画布, 然后再画布上分别绘图.
import matplotlib.pyplot as plt # 设置画布大小 plt.figure(figsize=(6, 3)) fig = plt.figure(1) sp1 = fig.add_subplot(211) sp1.plot([1, 2, 3]) # 每个画布大小都必须设置一遍 plt.figure(figsize=(6, 3)) fig2 = plt.figure(2) sp2 = fig2.add_subplot(211) sp2.plot([4, 5, 6]) plt.show()
在一个画布上:
plt.figure(figsize=(6, 3))
fig = plt.figure(1)
sp1 = fig.add_subplot(211)
sp1.plot([1, 2, 3])
sp2 = fig.add_subplot(212)
sp2.plot([4, 5, 6])
plt.show(<
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。