[机器学习与scikit-learn-20]:算法-逻辑回归-线性逻辑回归linear_model.LogisticRegression与代码实现
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:[机器学习与scikit-learn-20]:算法-逻辑回归-线性逻辑回归linear_model.LogisticRegression与代码实现_文火冰糖(王文兵)的博客-CSDN博客
目录
第1章 scikit-learn线性逻辑回归的实现
第2章 linear_model.LogisticRegression类参数详解
2.1 类原型
2.2 正则化
2.3 类参数说明
第3章 线性逻辑回归代码示例
3.1 步骤1:生成、构建训练数据集
3.2 步骤2:构建模型并训练模型
3.3 步骤3:可视化模型预测的分类边界
第1章 scikit-learn线性逻辑回归的实现
第2章 linear_model.LogisticRegression类参数详解
2.1 类原型
class sklearn.linear_model.LogisticRegression (
penalty=’l2’,
dual=False, tol=0.0001, C=1.0,
fit_intercept=True,
intercept_scaling=1,
class_weight=None,
random_state=None,
solver=’warn’,
max_iter=100,
multi_class=’warn’,
verbose=0, warm_start=False, n_jobs=None)
2.2 正则化
正则化是用来防止模型过拟合的过程,常用的有L1正则化和L2正则化两种选项,分别通过在损失函数后加上参数向量 的L1范式和L2范式的倍数来实现。
这个增加的范式,被称为“正则项”,也被称为"惩罚项"。
损失函数改变,基于损失函数的最优化来求解的参数取值必然改变,我们以此来调节模型拟合的程度。其中L1范式表现为参数向量中的每个参数的绝对值之和,L2范数表现为参数向量中的每个参数的平方和的开方值。
2.3 类参数说明
(1)penalty='l2'
: 正则化参数类型,字符串‘l1’或‘l2’,默认‘l2’。
(2)dual=False
:
对偶或者原始方法。Dual只适用于正则化相为l2的‘liblinear’的情况,通常样本数大于特征数的情况下,默认为False。
(3)C=1.0
: C为正则化系数λ的倒数,必须为正数,默认为1。
和SVM中的C一样,值越小,代表正则化越强。
(4)fit_intercept=True
: 是否存在截距,默认存在。
(5)intercept_scaling=1
: 仅在正则化项为‘liblinear’,且fit_intercept设置为True时有用
(6)solver='liblinear'
: solver参数决定了我们对逻辑回归损失函数的优化方法,有四种算法可以选择。
- a) liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
- b) lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
- c) newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
- d) sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。
从上面的描述可以看出,newton-cg、lbfgs和sag这三种优化算法时都需要损失函数的一阶或者二阶连续导数,因此不能用于没有连续导数的L1正则化,只能用于L2正则化。而liblinear通吃L1正则化和L2正则化。
同时,sag每次仅仅使用了部分样本进行梯度迭代,所以当样本量少的时候不要选择它,而如果样本量非常大,比如大于10万,sag是第一选择。但是sag不能用于L1正则化,所以当你有大量的样本,又需要L1正则化的话就要自己做取舍了。要么通过对样本采样来降低样本量,要么回到L2正则化。
但是liblinear也有自己的弱点!我们知道,逻辑回归有二元逻辑回归和多元逻辑回归。对于多元逻辑回归常见的有one-vs-rest(OvR)和many-vs-many(MvM)两种。而MvM一般比OvR分类相对准确一些。而liblinear只支持OvR,不支持MvM,这样如果我们需要相对精确的多元逻辑回归时,就不能选择liblinear了。也意味着如果我们需要相对精确的多元逻辑回归不能使用L1正则化了。
第3章 线性逻辑回归代码示例
线性回归是指模型是用“直线”拟合,用直线回归、然后分类。
适合于数据的分布界限是:直线可以分割的。
3.1 步骤1:生成、构建训练数据集
# 导入库
import numpy as np
import matplotlib.pyplot as plt# 创建自动生成的数据集
np.random.seed(0)# 生成二维随机向量点(X1,X2)
X = np.random.normal(0, 1, size=(200, 2))
X1 = X[:,0]
X2 = X[:,1]
print(X.shape)
print(X1.shape)
print(X2.shape)# 生成样本二分类的标签:
# 2X+X2 > 1的点标签为1
# 2X+X2 =< 1的点标签为0
# 边界:直线边界 X1^2 + X2
Y = np.array((X1**2 + X2) > 1, dtype='int')
print(Y.shape)
print(Y)# 随机抽取 20个样本,强制其分类为 1,
# 相当于更改数据,添加噪音
for _ in range(10):Y[np.random.randint(200)] = 1# 所有标签y=0的点
plt.scatter(X[Y==0, 0], X[Y==0, 1])# 所有标签y=1的点
plt.scatter(X[Y==1, 0], X[Y==1, 1])plt.show()
(200, 2) (200,) (200,) (200,) [1 1 1 0 0 1 0 0 1 0 1 0 1 0 1 0 0 0 1 0 0 1 0 1 1 1 0 0 0 0 0 0 0 1 0 0 00 0 0 1 0 1 1 1 1 1 0 1 0 1 1 1 0 1 1 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 11 1 0 0 0 0 1 0 1 0 1 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 1 0 0 0 1 0 0 0 1 00 1 0 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 1 0 0 0 1 0 0 1 1 1 0 1 1 0 1 10 0 1 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 1 0 1 0 0 1 0 0 00 0 0 0 0 1 1 0 0 1 0 0 0 1 1]
3.2 步骤2:构建模型并训练模型
# 构建模型并训练模型
from sklearn.model_selection import train_test_splitX_train, X_test, Y_train, Y_test = train_test_split(X, Y, random_state=0)from sklearn.linear_model import LogisticRegression#log_reg = LogisticRegression()
log_reg = LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,penalty='l2', random_state=None, solver='liblinear', tol=0.0001,verbose=0, warm_start=False)
log_reg.fit(X_train, Y_train)
score_train = log_reg.score(X_train, Y_train)
score_test = log_reg.score(X_test, Y_test)
print("训练集分数",score_train)
print("测试集分数:",score_test)
训练集分数 0.7933333333333333 测试集分数: 0.8
备注:从上图可以看出,用直线去拟合抛物线分布的向量点,准确率并不高。
下一篇文章看如何优化,使用多项式来进行预测。
3.3 步骤3:可视化模型预测的分类边界
# 可视化训练结果#可视化决策边界:通过两种预测分类的颜色不同来展示决策的边界
# 背景数据:为二维网格数据点:meshgrid
# 所有用模型预测为1的点,标注红色
# 所有用模型预测为0的点,标注为蓝色
def plot_decision_boundary(model, axis):# 生成二维度的网格数据x1, x2 = np.meshgrid(np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1,1),np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1,1))print("x1.shape", x1.shape)print("x2.shape", x2.shape)# 组合X1,X2, 得到(X1,X2)向量点X = np.c_[x1.ravel(), x2.ravel()]print("X.shape", X.shape)# 模型预测分类y_predict = model.predict(X)print("y_predict.shape=", y_predict.shape)# 把一维预测值转换成网格上的点的分类类型y = y_predict.reshape(x1.shape)print("y.shape=", y.shape)print(y)from matplotlib.colors import ListedColormapcustom_cmap = ListedColormap(['#EF9A9A','#FFF59D','#90CAF9'])# 彩色打印网格点,网格点的颜色由y的类型确定# y的类型,由模型对网格点的预测得到plt.contourf(x1, x2, y, linewidth=5, cmap=custom_cmap)plot_decision_boundary(log_reg, axis=[-3, 3, -3, 3])# 可视化源样本点
plt.scatter(X[Y==0,0], X[Y==0,1])
plt.scatter(X[Y==1,0], X[Y==1,1])plt.show()
x1.shape (600, 600) x2.shape (600, 600) X.shape (360000, 2) y_predict.shape= (360000,) y.shape= (600, 600) [[0 0 0 ... 0 0 0][0 0 0 ... 0 0 0][0 0 0 ... 0 0 0]...[1 1 1 ... 1 1 1][1 1 1 ... 1 1 1][1 1 1 ... 1 1 1]]
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客
本文网址:[机器学习与scikit-learn-20]:算法-逻辑回归-线性逻辑回归linear_model.LogisticRegression与代码实现_文火冰糖(王文兵)的博客-CSDN博客
[机器学习与scikit-learn-20]:算法-逻辑回归-线性逻辑回归linear_model.LogisticRegression与代码实现相关推荐
- 机器学习与Scikit Learn学习库
摘要: 本文介绍机器学习相关的学习库Scikit Learn,包含其安装及具体识别手写体数字案例,适合机器学习初学者入门Scikit Learn. 在我科研的时候,机器学习(ML)是计算机科学领域中最 ...
- 【机器学习入门】(8) 线性回归算法:正则化、岭回归、实例应用(房价预测)附python完整代码和数据集
各位同学好,今天我和大家分享一下python机器学习中线性回归算法的实例应用,并介绍正则化.岭回归方法.在上一篇文章中我介绍了线性回归算法的原理及推导过程:[机器学习](7) 线性回归算法:原理.公式 ...
- 机器学习算法(3)—— 逻辑回归算法
逻辑回归算法 1 逻辑回归介绍 2 损失及优化 3 逻辑回归的使用 4 分类评估方法 4.1 混淆矩阵 4.2 ROC曲线与AUC指标 4.3 ROC曲线绘制 5 分类中类别不平衡问题 5.1 过采样 ...
- 机器学习(18)——分类算法(补充)
目录 1 sklearn转换器和估计器 1.1 转换器 1.2 估计器 2 K-近邻算法(KNN) 2.1 案例1--鸢尾花种类预测 3 模型选择与调优 3.1 什么是交叉验证(cross valid ...
- 逻辑回归、逻辑回归的损失和优化
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 3.1 逻辑回归介绍 逻辑回归(Logistic Regres ...
- 【机器学习算法笔记系列】逻辑回归(LR)算法详解和实战
逻辑回归(LR)算法概述 逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法. 逻辑 ...
- 机器学习算法(四)逻辑回归理论与python实现+经典示例(从疝气病预测病马的死亡率)
学习笔记更新 什么是逻辑回归? 简要介绍 逻辑回归是用来解决线性回归问题的,它将线性回归得到的结果通过逻辑函数映射到[0,1]之间,因此称逻辑回归.逻辑回归模型主要用于解决二分类问题,是一个分 ...
- 【机器学习算法-python实现】逻辑回归的实现(LogicalRegression)
1.背景知识 在刚刚结束的天猫大数据s1比赛中,逻辑回归是大家都普遍使用且效果不错的一种算法. (1)回归 先来说说什么是回归,比如说我们有两类数据,各有50十个点 ...
- 机器学习算法总结--线性回归和逻辑回归
1. 线性回归 简述 在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析.这种函数是一个或多个称为回 ...
- [转载]Scikit Learn: 在python中机器学习
原址:http://my.oschina.net/u/175377/blog/84420 目录[-] Scikit Learn: 在python中机器学习 载入示例数据 一个改变数据集大小的示例:数码 ...
最新文章
- 三关节机械臂控制需求说明压缩文件中的相关文档说明
- vim-go开发环境Tagbar插件和NERTree插件安装
- 实战测试SO_REUSEADDR选项
- 设计模式--中介者(Mediator)模式
- 王者荣耀用什么开发引擎做的?
- ps抠头发插件_「福利」PS抠图神级插件——VertusFluid Mask
- hadoop(一) 基本介绍
- RTMP直播应用与延时分析
- git命令之git rebase 的用法
- java 从一个容器获取对象,Java 如何实现从spring容器中获取注入的bean对象
- 如何用echarts创建市区地图
- 渗透测试工程师(实习生)面试题目
- Ubuntu 16.04 Kalibr安装使用
- video标签使用controls属性怎么去掉三个点
- 【转载】mysql语句写作顺序以及执行顺序
- Freemarker操作word文档
- AMD CPU 电脑突然画面声音突然卡顿,卡碟声,画面撕裂
- ubuntu下命令行禁用笔记本触摸板
- c语言风光互补运行模式,基于风光互补特性的风电光热电站联合系统容量优化方法与流程...
- 万字长文剖析架构设计全攻略(上)