过拟合与欠拟合

过拟合:一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在训练数据外的数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象。(模型过于复杂)

欠拟合:一个假设在训练数据上不能获得更好的拟合, 但是在训练数据外的数据集上也不能很好地拟合数据,此时认为这个假设出现了欠拟合的现象。(模型过于简单)

欠拟合原因以及解决办法

  • 原因:学习到数据的特征过少
  • 解决办法:增加数据的特征数量

过拟合原因以及解决办法

  • 原因:原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾各个测试数据点,数据的特征和目标值之间不仅仅是线性关系

  • 解决办法:

    • 进行特征选择,消除关联性大的特征(很难做)
    • 交叉验证(让所有数据都有过训练)
    • 正则化

回忆一下特征选择方法:

  • 过滤式:低方差特征
  • 嵌入式:正则化,决策树,神经网络

L2正则化

作用:可以使得W的每个元素都很小,都接近于0

优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象

线性回归:LinearRegression 容易出现过拟合,为了把训练接数据表现更好

L2正则化:Ridge:岭回归 带有正则化的线性回归 解决过拟合

岭回归

带有正则化的线性回归-Ridge

sklearn.linear_model.Ridge

Ridge

具有l2正则化的线性最小二乘法

  • sklearn.linear_model.Ridge(alpha=1.0)

    • alpha:正则化力度
    • coef_:回归系数
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_errordef mylinear():"""线性回归直接预测房子价格:return: None"""# 获取数据lb = load_boston()# 分割数据集到训练集和测试集x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)# 进行标准化处理(目标值要进行标准化处理)# 特征值和目标值都必须进行标准化处理, 实例化两个标准化APIstd_x = StandardScaler()x_train = std_x.fit_transform(x_train)x_test = std_x.transform(x_test)# 目标值std_y = StandardScaler()y_train = std_y.fit_transform(y_train.reshape(-1, 1))y_test = std_y.transform(y_test.reshape(-1, 1))# estimator预测# 岭回归去进行房价预测rd = Ridge(alpha=1.0)rd.fit(x_train, y_train)print(rd.coef_)# 预测测试集的房子价格y_rd_predict = std_y.inverse_transform(rd.predict(x_test))print("岭回归测试集里面每个房子的预测价格: ", y_rd_predict)print("岭回归的均方误差: ", mean_squared_error(std_y.inverse_transform(y_test), y_rd_predict))if __name__ == "__main__":mylinear()

线性回归 LinearRegression与Ridge对比

岭回归:回归得到的回归系数更符合实际,更可靠。另外,能让估计参数的波动范围变小,变的更稳定。在存在病态数据偏多的研究中有较大的实用价值。

分类算法-逻辑回归

逻辑回归:线性回归的式子作为逻辑回归的输入,适用于二分类场景,他也能得出概率值

  • 广告点击率
  • 判断用户的性别
  • 预测用户是否会购买给定的商品类
  • 判断一条评论是正面的还是负面的

逻辑回归是解决二分类问题的利器

逻辑回归

输入:

逻辑回归的输入-sigmoid→分类

sigmodid函数会把值映射到[0, 1],也就是把我们的输入值转换成一个概率值

逻辑回归公式

公式:

输出:[0,1]区间的概率值,默认0.5作为阀值

注:g(z)为sigmoid函数

逻辑回归的损失函数、优化

与线性回归原理相同,但由于是分类问题,损失函数不一样,只能通过梯度下降求解

对数似然损失函数:

损失函数:

  • 均方误差:不存在多个局部最低点,只有一个最小值
  • 对数似然损失:多个局部最小值

对数似然损失求出来的不一定是总函数的最小值,目前还是一个解决不了的问题,但是我们可以采取一些方案去尽量改善:

  1. 多次随机初始化,多次比较最小值结果
  2. 求解过程中,调整学习率

尽管没有全局最低点,但是效果都是不错的

sklearn逻辑回归API

sklearn.linear_model.LogisticRegression

LogisticRegression

sklearn.linear_model.LogisticRegression(penalty=‘l2’, C = 1.0)

  • Logistic回归分类器
  • coef_:回归系数
from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge, LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, classification_report
import joblib
import pandas as pd
import numpy as np
import ssldef logistic():"""良/恶性乳腺癌肿瘤预测原始数据的下载地址:https://archive.ics.uci.edu/ml/machine-learning-databases/逻辑回归做二分类进行癌症预测(根据细胞的属性特征):return: None"""ssl._create_default_https_context = ssl._create_unverified_context# 构造列标签名字column = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape','Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin', 'Normal Nucleoli','Mitoses', 'Class']# 读取数据data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data",names=column)print(data)# 缺失值进行处理(替换“?”为nan)data = data.replace(to_replace='?', value=np.nan)#直接删除掉nandata = data.dropna()# 进行数据的分割x_train, x_test, y_train, y_test = train_test_split(data[column[1:10]], data[column[10]], test_size=0.25)# 进行标准化处理std = StandardScaler()#训练数据标准化x_train = std.fit_transform(x_train)# 测试数据标准化x_test = std.transform(x_test)# 逻辑回归预测 # 默认使用L2正则化避免过拟合,C=1.0表示正则力度(超参数,可以调参调优)lg = LogisticRegression(C=1.0)lg.fit(x_train, y_train)#回归的系数print(lg.coef_)#回归预测y_predict = lg.predict(x_test)print("准确率:", lg.score(x_test, y_test))print("召回率:", classification_report(y_test, y_predict, labels=[2, 4], target_names=["良性", "恶性"]))return Noneif __name__ == "__main__":logistic()

LogisticRegression总结

应用:广告点击率预测、电商购物搭配推荐

优点:适合需要得到一个分类概率的场景

缺点:当特征空间很大时,逻辑回归的性能不是很好(看硬件能力)

生成模型和判别模型

先验概率:从历史的数据中总结出概率信息。

需要进行先验概率的模型就是生成模型。

判别模型:k-近邻,决策树,随机森林,神经网络

生成模型:朴素贝叶斯,隐马尔可夫模型

  逻辑回归 朴素贝叶斯
解决问题 二分类 多分类
应用场景 二分类需要概率的问题 文本分类
参数 正则化力度 没有

参考地址:https://www.jianshu.com/p/8b802d24eb39

sklearn之逻辑回归和岭回归相关推荐

  1. Machine Learning | (10) 回归算法-岭回归

    Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...

  2. lasso回归_线性回归amp;lasso回归amp;岭回归介绍与对比

    1. 回顾最小二乘法 详细的解释在以下这个链接 https://www.matongxue.com/madocs/818 简而言之,最小二乘法展现了平方误差值最小的时候,就是最好的拟合回归线. 2. ...

  3. lasso回归和岭回归_如何计划新产品和服务机会的回归

    lasso回归和岭回归 Marketers sometimes have to be creative to offer customers something new without the lux ...

  4. lasso回归与岭回归

    lasso回归与岭回归 简介 lasso回归(Least Absolute Shrinkage and Selection Operator Regression)与岭回归(Ridge Regress ...

  5. 线性回归——lasso回归和岭回归(ridge regression)

    目录 线性回归--最小二乘 Lasso回归和岭回归 为什么 lasso 更容易使部分权重变为 0 而 ridge 不行? References 线性回归很简单,用线性函数拟合数据,用 mean squ ...

  6. 线性回归、lasso回归、岭回归以及弹性网络的系统解释

    线性回归.lasso回归.岭回归以及弹性网络的系统解释 声明 背景介绍 概述 线性回归模型函数及损失函数 线性回归算法 多项式回归(线性回归的推广) 广义线性回归(线性回归的推广) 岭回归(Ridge ...

  7. 应用预测建模第六章-线性回归-预测化合物溶解度练习-R语言(多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网)

    模型:多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网 语言:R语言 参考书:应用预测建模 Applied Predictive Modeling (2013) by Max K ...

  8. 应用预测建模第六章线性回归习题6.1【主成分分析,模型的最优参数选择与模型对比 ,多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网】

    模型:多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网 语言:R语言 参考书:应用预测建模 Applied Predictive Modeling (2013) by Max K ...

  9. 应用预测建模第六章线性回归习题6.3【缺失值插补,分层抽样,预测变量重要性,重要预测变量如何影响响应变量,多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网】

    模型:多元线性回归,稳健回归,偏最小二乘回归,岭回归,lasso回归,弹性网 语言:R语言 参考书:应用预测建模 Applied Predictive Modeling (2013) by Max K ...

  10. SparkML之回归(二)岭回归和Lasso阐述及OLS,梯度下降比较

    岭回归(RidgeRegression)它的上一级称之为Tikhonov regularization,是以Andrey Tikhonov命名的. Lasso(least absolute shrin ...

最新文章

  1. python meshgrid()理解
  2. mysql 批量drop_MySql批量drop table
  3. goroutine sync.Mutex互斥锁Lock的使用
  4. java三大范_Java深度学习系列——数据库的三大范式
  5. python 并列条形图_python – 来自两个pandas数据框的分组条形图
  6. linux 内核定时器精度_linux使用select实现精确定时器详解
  7. 算法题存档20190204
  8. 实战!轻松搭建图像分类 AI 服务
  9. vimnbsp;自动识别UTF8和GB2312
  10. 在 Ubuntu 上配置高性能的 HHVM 环境
  11. 安卓客户端使用矢量图
  12. PR2019 (一)介绍、基本操作
  13. html 怎么让整体居中,html中表格整体居中 详解html里面如何让表格居中
  14. Matlab求解数组中的最大值以及它所在的位置
  15. 70句计算机英语,70句必背的经典英文电影台词(中英双语)
  16. python中def main是什么意思_浅析Python中的main函数
  17. sklearn代码9 7-KNN-salay
  18. angularjs2大漠穷秋视频笔记整理
  19. ForgivingExceptionHandler: An unexpected connection driver error occured (Exception message: Socket
  20. 非常好用的一款在线甘特图工具

热门文章

  1. 马化腾,你就把微信卖给运营商得了
  2. Oracle Golden Gate 系列十二 -- GG 数据初始化装载二 基于SCN 的初始化 说明 与 示例...
  3. vscode运行html的插件_vscode前端常用插件推荐,搭建JQuery、Vue等开发环境
  4. 心理压力如何测试软件,心理压力测试 缓解压力有什么办法
  5. python打印表格_python 6.7 编写printTable()函数表格打印(完整代码)
  6. python查找字符串出现次数_Python搜索文本文件并计算指定字符串的出现次数
  7. 分子动力学模拟软件_机器学习模拟1亿原子:中美团队获2020「超算诺贝尔奖」戈登贝尔奖...
  8. aopaspect区别_spring 中的aop:advisor和aop:aspect有什么区别?
  9. 设计灵感|海报设计常见中看起来很高级的文字排版
  10. 创新元旦新年PSD分层海报,新气象开启!