不属于';?>

首页 / 财经

机器学习系列-逻辑回归(LogisticRegression)示例

By 不属于 •  2019-01-11 20:03 •  7次点击 短消息
笔者介绍

曾担任零售企业项目负责人,负责企业数据化转型,数据化管理;曾服务中国移动,负责客服部门产品推荐模型组组长;现于某金融投资公司大数据中心,负责风控数据建设,风控建模工作。在除工作外,也喜欢在DC、DF、天池、Kaggle参加一些比赛。机器学习方面,有一定经验,愿与各位分享我的所见所闻所想,与各位共同进步。

背景

本节是上一节的补充,长话短说正式开始。

工具:python

数据:使用numpy随机生成的数据

注:此文章介绍如何使用sklearn.linear_model.LogisticRegression进行逻辑回归,关于逻辑回归的实例以及业务注意点,在后续开的案例分享再介绍。

模块

LogisticRegression是python - sklearn.linear_model模块下的算法模型

参数:

penalty:str,'l1'或'l2',默认:'l2'。用于指定惩罚中使用的规范。'newton-cg','sag'和'lbfgs'解算器只支持l2惩罚。

dual : boll,默认值:False,双重或原始配方。双配方仅用于利用liblinear解算器的l2惩罚。当样本数量大于特征数量时,首选dual = False。

tol:float,默认值:1e-4,当损失函数小于此值时停止

C :float,默认值:1.0,正则因子惩罚度大小,较小的值指定更强的正则化。

fit_intercept : bool,默认值:True,指定是否应将常量(也称为偏差或截距)添加到模型中。

intercept_scaling : float,默认值为1,仅在使用求解器“liblinear”且self.fit_intercept设置为True时有用。在这种情况下,x变为[x,self.intercept_scaling],即具有等于intercept_scaling的常数值的“合成”特征被附加到实例向量。截距变成了。intercept_scaling * synthetic_feature_weight注意!合成特征权重与所有其他特征一样经受l1 / l2正则化。为了减小正则化对合成特征权重(并因此对截距)的影响,必须增加intercept_scaling。简单来说,就是常数项系数,一般来说无用,默认乘以1不用管他。

class_weight : dict或'balanced',默认值:无,与表单中的类关联的权重。如果没有给出,所有课程都应该有一个重量。如果给出权重,模型将按照权重系数着重考虑系数高的样本。

random_state : int,RandomState实例或None,可选,默认值:None,在随机数据混洗时使用的伪随机数生成器的种子。如果是int,则random_state是随机数生成器使用的种子; 如果是RandomState实例,则random_state是随机数生成器; 如果没有,随机数生成器所使用的RandomState实例np.random。在solver=='sag'或'liblinear'时使用。

solver : str,{'newton-cg','lbfgs','liblinear','sag','saga'},默认:'liblinear',

用于优化问题的算法。

对于小数据集,'liblinear'是一个不错的选择,而'sag'和'saga'对于大数据集来说更快。

对于多类问题,只有'newton-cg','sag','saga'和'lbfgs'处理多项损失; 'liblinear'仅限于一对一休息方案。

'newton-cg','lbfgs'和'sag'只处理L2惩罚,而'liblinear'和'saga'处理L1惩罚。

请注意,“sag”和“saga”快速收敛仅在具有大致相同比例的要素上得到保证。您可以使用sklearn.preprocessing中的缩放器预处理数据。

max_iter : int,默认值:100,仅适用于newton-cg,sag和lbfgs求解器。求解器收敛的最大迭代次数。

multi_class : str,{'ovr','multinomial','auto'},默认值:'ovr',如果选择的选项是'ovr',那么二进制问题适合每个标签。对于“多项式”,最小化的损失是整个概率分布中的多项式损失拟合,即使数据是二进制的。当solver ='liblinear'时,'multinomial'不可用。如果数据是二进制的,或者如果solver ='liblinear','auto'选择'ovr',否则选择'multinomial'。

verbose : int,默认值:0,对于liblinear和lbfgs求解器,将verbose设置为任何正数以表示详细程度。

warm_start : bool,默认值:False,设置为True时,重用上一次调用的解决方案以适合初始化,否则,只需擦除以前的解决方案。对于liblinear解算器没用。warm_start支持lbfgsnewton-cgsagsaga求解器。

n_jobs : int或None,可选(默认=无),如果multi_class ='ovr'“,则在对类进行并行化时使用的CPU核心数。solver无论是否指定了“multi_class”,当设为“liblinear” 时,将忽略此参数。-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)[source] 
代码示例

加载包

import numpy as np from sklearn.datasets import load_iris from sklearn.linear_model import LogisticRegression 

生成数据集

x = np.random.rand(500,12) y = np.random.randint(0,2,500) 

训练模型

clf = LogisticRegression(penalty='l2',tol=0.001,C=0.015).fit(x, y) 

预测模型-后20个

clf.predict(x[-20:]) 

array([0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0])

预测概率

clf.predict_proba(x[-20:])  

array([0.44586493, 0.58530877, 0.47654274, 0.5221821 , 0.58275988,

0.40886304, 0.42691236, 0.47133372, 0.35632326, 0.49766072,

0.41621382, 0.49932532, 0.61366678, 0.50361329, 0.63785387,

0.47586315, 0.5094063 , 0.40538122, 0.50815342, 0.47605233])

正确率

clf.score(x, y) 

0.578

获得常数项

clf.intercept_ 

array([-0.23033127])

获得系数项

clf.coef_ 

array([[ 0.08924007, -0.24591956, -0.18926068, 0.03761195, -0.19509077,

0.1213278 , 0.46572749, 0.04136385, 0.43690947, 0.0293426 ,

-0.4416474 , 0.43510285]])

本次分享到此为止,后续将继续分享,如对您有帮助,请关注并转发支持谢谢。

0 回复 添加回复

回复

用户中心

登录 没有账号请 注册

广告位

可靠云cdn为本站提供cdn加速 咨询购买广告位请加QQ:24470850
  • 官方讨论群:40683355
  • 迅雷VIP群:11946109
  • 业务QQ: 24470850