欠拟合与过拟合
什么是过拟合与欠拟合
欠拟合算法

过拟合api

- 第一种状况:由于机器学习到的天鹅特征太少了,致使区分标准太粗糙,不能准确识别出天鹅。
- 第二种状况:机器已经基本能区别天鹅和其余动物了。而后,很不巧已有的天鹅图片全是白天鹅的,因而机器通过学习后,会认为天鹅的羽毛都是白的,之后看到羽毛是黑的天鹅就会认为那不是天鹅。
定义
- 过拟合:一个假设在训练数据上可以得到比其余假设更好的拟合, 可是在测试数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。(模型过于复杂)
- 欠拟合:一个假设在训练数据上不能得到更好的拟合,而且在测试数据集上也不能很好地拟合数据,此时认为这个假设出现了欠拟合的现象。(模型过于简单)
缘由以及解决办法
- 欠拟合缘由以及解决办法
- 缘由:学习到数据的特征过少
- 解决办法:增长数据的特征数量
- 过拟合缘由以及解决办法
- 缘由:原始特征过多,存在一些嘈杂特征, 模型过于复杂是由于模型尝试去兼顾各个测试数据点
- 解决办法:

在学习的时候,数据提供的特征有些影响模型复杂度或者这个特征的数据点异常较多,因此算法在学习的时候尽可能减小这个特征的影响(甚至删除某个特征的影响),这就是正则化dom
正则化类别
- L2正则化
- 做用:可使得其中一些W的都很小,都接近于0,削弱某个特征的影响
- 优势:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象
- Ridge回归
- L1正则化
- 做用:可使得其中一些W的值直接为0,删除这个特征的影响
- LASSO回归
线性回归的改进-岭回归
带有L2正则化的线性回归-岭回归
API
sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True,solver="auto", normalize=False)机器学习
- 具备l2正则化的线性回归
- alpha:正则化力度,也叫 λ
- solver:会根据数据自动选择优化方法
- sag:若是数据集、特征都比较大,选择该随机梯度降低优化
- normalize:数据是否进行标准化
- normalize=False:能够在fit以前调用preprocessing.StandardScaler标准化数据
- Ridge.coef_:回归权重
- Ridge.intercept_:回归偏置
Ridge方法至关于SGDRegressor(penalty='l2', loss="squared_loss"),只不过SGDRegressor实现了一个普通的随机梯度降低学习,推荐使用Ridge(实现了SAG)
sklearn.linear_model.RidgeCV(_BaseRidgeCV, RegressorMixin)函数
- 具备l2正则化的线性回归,能够进行交叉验证
- coef_:回归系数
案例-波士顿房价预测
def linear3():
"""
岭回归的优化方法对波士顿房价预测
"""
#获取数据
boston=load_boston()
#划分数据集
x_train,x_test,y_train,y_test=train_test_split(boston.data,boston.target,random_state=22)
#标准化
transfer=StandardScaler()
x_train=transfer.fit_transform(x_train)
x_test=transfer.transform(x_test)
#预估器
estimator=Ridge(alpha=0.0001, max_iter=100000)
estimator.fit(x_train,y_train)
#得出模型
print("岭回归-权重系数为:\n",estimator.coef_)
print("岭回归-偏置为:\n",estimator.intercept_ )
#模型评估
y_predict = estimator.predict(x_test)
print("预测房价:\n", y_predict)
error = mean_squared_error(y_test, y_predict)
print("岭回归-均方差偏差:\n", error)
return None
if __name__ == '__main__':
linear3()
结果为:性能


分类算法-逻辑回归与二分类
逻辑回归的应用场景
- 广告点击率
- 是否为垃圾邮件
- 是否患病
- 金融诈骗
- 虚假帐号
看到上面的例子,咱们能够发现其中的特色,那就是都属于两个类别之间的判断。逻辑回归就是解决二分类问题的利器学习
逻辑回归的原理
输入
逻辑回归的输入就是一个线性回归的结果。测试

激活函数

- 回归的结果输入到sigmoid函数当中
- 输出结果:[0, 1]区间中的一个几率值,默认为0.5为阈值
输出结果解释(重要):假设有两个类别A,B,而且假设咱们的几率值为属于A(1)这个类别的几率值。如今有一个样本的输入到逻辑回归输出结果0.6,那么这个几率值超过0.5,意味着咱们训练或者预测的结果就是A(1)类别。那么反之,若是得出结果为0.3那么,训练或者预测结果就为B(0)类别。
因此接下来咱们回忆以前的线性回归预测结果咱们用均方偏差衡量,那若是对于逻辑回归,咱们预测的结果不对该怎么去衡量这个损失呢?咱们来看这样一张图

那么如何去衡量逻辑回归的预测结果与真实结果的差别呢?优化
损失以及优化
损失
逻辑回归的损失,称之为对数似然损失,公式以下:spa



接下来咱们呢就带入上面那个例子来计算一遍,就能理解意义了。

逻辑回归API
sklearn.linear_model.LogisticRegression(solver='liblinear', penalty=‘l2’, C = 1.0)
- solver:优化求解方式(默认开源的liblinear库实现,内部使用了坐标轴降低法来迭代优化损失函数)
- penalty:正则化的种类
- C:正则化力度
案例:癌症分类预测-良/恶性乳腺癌肿瘤预测
相关数据:https://archive.ics.uci.edu/ml/machine-learning-databases/
分析
代码:







在不少分类场景当中咱们不必定只关注预测的准确率!!!!!
好比以这个癌症举例子!!!咱们并不关注预测的准确率,而是关注在全部的样本当中,癌症患者有没有被所有预测(检测)出来。
分类的评估方法
精确率与召回率
在分类任务下,预测结果(Predicted Condition)与正确标记(True Condition)之间存在四种不一样的组合,构成混淆矩阵(适用于多分类)

- 精确率:预测结果为正例样本中真实为正例的比例(了解)

- 召回率:真实为正例的样本中预测结果为正例的比例(查的全,对正样本的区分能力)

还有其余的评估标准,F1-score,反映了模型的稳健型

分类评估报告API
- sklearn.metrics.classification_report(y_true, y_pred, labels=[], target_names=None )
-
- y_true:真实目标值
- y_pred:估计器预测目标值
- labels:指定类别对应的数字
- target_names:目标类别名称
- return:每一个类别精确率与召回率

ROC曲线与AUC指标
知道TPR与FPR
- TPR = TP / (TP + FN)
- FPR = FP / (FP + FN)
ROC曲线
- ROC曲线的横轴就是FPRate,纵轴就是TPRate,当两者相等时,表示的意义则是:对于不论真实类别是1仍是0的样本,分类器预测为1的几率是相等的,此时AUC为0.5

AUC指标
- AUC的几率意义是随机取一对正负样本,正样本得分大于负样本的几率
- AUC的最小值为0.5,最大值为1,取值越高越好
- AUC=1,完美分类器,采用这个预测模型时,无论设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
- 0.5<AUC<1,优于随机猜想。这个分类器(模型)妥善设定阈值的话,能有预测价值。
最终AUC的范围在[0.5, 1]之间,而且越接近1越好
AUC计算API
- from sklearn.metrics import roc_auc_score
- sklearn.metrics.roc_auc_score(y_true, y_score)
- 计算ROC曲线面积,即AUC值
- y_true:每一个样本的真实类别,必须为0(反例),1(正例)标记
- y_score:每一个样本预测的几率值

总结
- AUC只能用来评价二分类
- AUC很是适合评价样本不平衡中的分类器性能