占坑,完善中。。。。
模型的选择就是为了解决过拟合和欠拟合问题
过拟合: 解决简单问题用了过于复杂的模型, 机关枪打苍蝇
欠拟合:解决复杂问题用了过于简单的模型,打哥斯拉用苍蝇拍
欠拟合产生的原因,对数据类型的过度简化。
过拟合产生的原因:过度细化分类的特征,导致其实是同一类的物品因为某一特征无法匹配而不能正确归类。会导致模型在训练的时候是记住数据集而不是特征。

模型复杂度图表,训练集的误差和测试集的误差值作为x轴上的两个点,当两个点的距离和高度都最小的时候,模型是最佳的。距离小但是高度过高,就是欠拟合,距离大就是过拟合。
禁止将测试集用于选择模型,这个是底线,所以正确的做法是引入k flod cross validation。用于防止过拟合。
代码:
把训练集分到K个不同的包中,每训练一次,用一个新的交叉验证集来验证内容。

当反复用训练集和交叉验证集进行选择的时候,以下是三种模型的复杂度曲线

复习一下模型选择的过程

上图是逻辑回归,逻辑回归的模型选择在于Degree,
1. 将数据集分为训练集,交叉验证集,测试集。
2. 选出N个模型
3. 计算模型参数
4, 计算F1得分
5. 选择分数最高(根据应用场景,这里假设需要精准度和召回率都比较准确)
6. 通过测试集验证步骤5选择的模型的效果
最终选定的模型的degree 就称为超参数,

对于不同模型来说,超参数的选择不同,在决策树中,超参数可以是深度。

支持向量机的算法模型中,可以通过网格法进行模型选择。
代码:网格搜索
https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html

代码:模型库
逻辑回归
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
神经网络
(注意:仅适用于 0.18 或更高版本的 scikit-learn)
from sklearn.neural_network import MLPClassifier
classifier = MLPClassifier()
决策树
from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier()
支持向量机
from sklearn.svm import SVC
classifier = SVC()
--------
使用sklearn.model_selection 中的 train_test_split函数来自动划分数据集和测试集
区分训练集和验证集还可以使用ShuffleSplit()。(有什么区别,是否还有其他进行训练集验证集分离的方法??)
网友评论