1.2 泛化、过拟合与欠拟合( 二 )


from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.neighbors import KNeighborsClassifierimport pandas as pdimport mglearn#导入数据集iris_dataset = load_iris()#拆分数据集X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)iris_dataframe = pd.DataFrame(X_train, columns=iris_dataset.feature_names)#画出散点图grr = pd.plotting.scatter_matrix(iris_dataframe, marker='o', figsize=(15, 15), c=y_train, hist_kwds={'bins': 20}, cmap=mglearn.cm3)#设定1个近邻knn = KNeighborsClassifier(n_neighbors=1)#拟合验证集knn.fit(X_train, y_train)#测量模型精度print(knn.score(X_test, y_test))
KNN的优点是简单,易于理解,易于实现,通常不用过多调节就可以得到不错的性能 。但是训练集很大(特征数很多或者样本数很大),预测速度会比较慢,效果不是很好 。
1.3.2 线性模型
入门视频可以参考:
入门文章求解线性模型参数:
进阶学习可以参考:
以上是学习线性模型的基础知识学习资料,已经有轮子了,直接用了,下面我想要说的是岭回归(ridge )和Lasso 。
两者都采用了正则化的约束,使得模型更简单,以避免过拟合,泛化性能更好 。
岭回归:对模型系数施加约束,使得系数(斜率)都接近于0,同时仍给出很好的预测结果 。称为L2正则化 。如果有足够多的训练数据,正则化变得不那么重要,并且岭回归和线性回归将具有相同的性能 。如下图所示:
图:岭回归和线性回归在波士顿房价数据集上的学习曲线
from mglearn import datasetsfrom sklearn.linear_model import Ridgefrom sklearn.model_selection import train_test_splitX, y = datasets.make_wave(n_samples=200)X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)#设置不同alpharidge1 = Ridge(alpha=0.1).fit(X_train, y_train)ridge2 = Ridge(alpha=100).fit(X_train, y_train)print(ridge1.score(X_train, y_train))print(ridge1.score(X_test, y_test))print(ridge2.score(X_train, y_train))print(ridge2.score(X_test, y_test))
以上是观察不同alpha值(约束)对泛化性能的影响,增大alpha的值,约束会更强,会使得系数更加趋近于0,从而降低训练集性能,单可能会提高泛化性能 。也可以通过改变样本的数量观察随着样本数量增加,alpha值影响的变化 。
Lasso:对模型系数施加约束,使得系数(斜率)接近于0,不同的是,某些系数设定为0,说明某些特征被模型完全忽略,这可以看做是一种自动化的特征选择,留下了关键的影响因子 。称为L1正则化 。
在实践中,一般选择岭回归,但如果特征很多,且只有其中几个是重要的,那么选择Lasso可能更好 。
1.3.3 决策树
一棵决策树包含 一个根节点,若干内部节点,若干叶子节点 。可以理解为,每一个节点里面都存储着一定量的数据集,根节点最多,包含数据的全集,一个节点的数据集等于其所有子节点的集合 。与此同时,根节点和内部节点都对应一个分类属性(分类的依据,就是 特征) 。根节点到某一个子节点的那条路径,对应了一个判定测试序列 。
站内有几篇文章可以参考:
【入门】【和机器学习入门2】决策树2——决策树构建
【入门】随机森林简介
【进阶】决策树
随机森林
【1.2 泛化、过拟合与欠拟合】随机森林本质上是许多决策树的集合,其中每棵树都和其他树略有不同 。随机森林背后的思想是,每棵树的预测可能都相对较好,但可能对部分数据过拟合 。如果构造很多树,并且每棵树的预测都很好,单都以不同的方式过拟合,那么我们可以对这些书的结果取平均值来降低过拟合,既能减少过拟合,又能保持树的预测能力 。