逻辑回归 - sklearn (LR、LRCV、MLP、RLR)- Python代码实现

目录

LR(LogisticRegression) - 线性回归

LRCV(LogisticRegressionCV )- 逻辑回归

MLP(MLPRegressor) - 人工神经网络

RLR(RandomizedLogisticRegression)-随机逻辑回归


logistic回归--因变量一般有1和0两种取值,将因变量的取值范围控制再0-1范围内,表示取值为1的概率。

数据源一般是这种类型(其中前8列是自变量,最后一列是因变量,因变量一般是0/1):

年龄婚姻状况子嗣工龄住宅类型房产类型月收入合同金额是否逾期
4721254312800506270
402171150000285731
452185440000570881
55211054150000588351
373172140000571461
622121215600428591
38325432800547170

在sklearn ,与逻辑回归有关的主要有三类:LogisticRegression(LR)、LogisticRegressionCV (LRCV)、logistic_regression_path。

LR和LRCV的主要区别是LRCV使用了交叉验证来选择正则化系数C,而LR需要自己每次指定一个正则化系数。例如这样:

model = LogisticRegression(C=0.000001);除此之外,两者用法基本相同。

logistic_regression_path比较特殊,它只能提供逻辑回归后最佳拟合函数的系数,不能直接给出预测结果,这有点不潮流。因此这里不做讲述,对比一些其他网站会发现,logistic_regression_path只是作为一个名字存在了。

除了上述三个类之外,这里还讲到了MLPRegressor(MLP)和RandomizedLogisticRegression(RLR)。

MLP即多层感知器,是一种前向结构的人工神经网络,映射一组输入向量到一组输出向量(如下图所示)。但是由于MLP的学习过程过于简单,大家一般不会单独拿来用,但是对于deep learning新手来说,还是可以入个门的。

 RLR看起来特别像LR的兄弟,但是RLR属于维度规约的算法类,不属于我们常说的分类算法的范畴。在本例中,由于我们选择了8个自变量,但是其中或许有不必要的自变量,我们需要通过维度规约(降维)来丢弃无用的自变量,这样可以降低算法存储量和时间的复杂度,优化模型。

LR(LogisticRegression) - 线性回归

LogisticRegression 的官方文档地址

代码实现:

# -*- coding:utf-8 -*-
from __future__ import division
import pandas as pddatafile = u'E:\\pythondata\\data\\ycshk2.csv'#文件所在位置,u为防止路径中有中文名称,此处没有,可以省略
data = pd.read_csv(datafile)#datafile是excel文件,所以用read_excel,如果是csv文件则用read_csvx = data.iloc[:,:8].as_matrix()#第1列到第7列的所有行
selection = [v for v in range(len(x)) if v % 10 != 0]#训练集所在的行数,只是一个索引,没有取到对应行的数据
selection2 = [v for v in range(len(x)) if v % 10 == 0]#每隔10行取一行作为检验集,v表示所在的行数,只是一个索引,没有取到对应行的数据
x2 = x[selection, :]#训练集数据-因素
x3 = x[selection2, :]#检验集数据-因素y = data.iloc[:,-1:].as_matrix()#最后一列
y2 = y[selection, :]#训练集数据-结果
y3 = y[selection2, :]#检验集数据-结果
print(x2)
print(y2)from sklearn.linear_model import LogisticRegression as LR#创建逻辑回归对象(3种情况:1.自设参数;2.balanced; 3.默认参数
########################################################### 1 .自己设置模型参数
#penalty = {0: 0.2, 1: 0.8}
#lr = LR(class_weight = penalty)#设置模型分类的权重为penalty# 2. 选择样本平衡-balanced
#lr = LR(class_weight='balanced')#样本平衡# 3. 默认参数,class_weight=none
lr = LR()
############################################################### 调用LogisticRegression中的fit函数/模块用来训练模型参数
lr.fit(x2, y2) 
print(u'逻辑回归模型筛选特征结束。')#通过检验集和预测模型来判断准确率
y22 = lr.predict(x2)#用训练集x2的数据通过模型进行预测,结果储存在变量y22中。
print(u'模型的平均准确率(训练集)为:%s'% lr.score(x2, y2))#使用逻辑回归模型自带的评分函数score获得模型在测试集上的准确性结果。
print(u'模型的平均准确率(训练集,y=0)为:%s'% (sum(y22[i] == 0 for i,v in enumerate(y2) if v == 0) / sum(1 for i,v in enumerate(y2) if v == 0)))
print(u'模型的平均准确率(训练集,y=1)为:%s'% (sum(y22[i] == 1 for i,v in enumerate(y2) if v == 1) / sum(1 for i,v in enumerate(y2) if v == 1)))
#上述准确率计算的解释:enumerate()表示遍历y2中的数据下标i和数据v,若y2[i]=v==0,且y22[i]==0,则求和,
#类似统计在预测变量y22中,预测结果与原结果y2是一致为0的个数,除以y2中所有为0的个数,得到预测变量y22的准确率y32 = lr.predict(x3)#用检验集x3的数据通过模型进行预测,结果储存在变量y32中。
print(u'模型的平均准确率(检验集)为:%s'% lr.score(x3, y3))#使用逻辑回归模型自带的评分函数score获得模型在测试集上的准确性结果。
print(u'模型的平均准确率(检验集,y=0)为:%s'% (sum(y32[i] == 0 for i,v in enumerate(y3) if v == 0) / sum(1 for i,v in enumerate(y3) if v == 0)))
print(u'模型的平均准确率(检验集,y=1)为:%s'% (sum(y32[i] == 1 for i,v in enumerate(y3) if v == 1) / sum(1 for i,v in enumerate(y3) if v == 1)))print(lr)#查看模型
print(lr.coef_)#查看模型的最佳拟合曲线各变量的参数
print(lr.intercept_)#查看模型的最佳拟合曲线的截距(常数项)#y2 = lr.predict_proba(x)

准确率对比:

1.自设参数:模型的平均准确率为:0.9563838146700168

2.banlance:模型的平均准确率为:0.5679417157381089

3.默认参数:模型的平均准确率为:0.9563838146700168

权重怎么设置和业务紧密相关,但是在这里我的自设参数和默认参数得到的结果是一样的,不知何故???


LRCV(LogisticRegressionCV )- 逻辑回归

LRCV的官方文档地址

两种算法基本相同,因此将上述代码中的

“from sklearn.linear_model import LogisticRegression as LR”

改为“from sklearn.linear_model import LogisticRegressionCV as LRCV”

“lr = LR()”改为“lr = LRCV()”,即可!


MLP(MLPRegressor) - 人工神经网络

MLP的官方文档地址

上述两段代码改为:

from sklearn.neural_network import MLPRegressor as MLPlr = MLP(activation='tanh', learning_rate='adaptive')#创建mlp神经网络对象

RLR(RandomizedLogisticRegression)-随机逻辑回归

RLR的官方文档地址

代码实现:

#-*- coding: utf-8-*-import pandas as pddatafile = u'E:\\pythondata\\kehu.xlsx'#文件所在位置,u为防止路径中有中文名称,此处没有,可以省略
data = pd.read_excel(datafile)#datafile是excel文件,所以用read_excel,如果是csv文件则用read_csv
x = data.iloc[:,:8].as_matrix()#第1列到第8列
y = data.iloc[:,8].as_matrix()#第9列from sklearn.linear_model import RandomizedLogisticRegression as RLRrlr = RLR()
rlr.fit(x, y)#训练模型
rlr.get_support(indices=True)
print(u'通过随机逻辑回归模型筛选特征结束。')
print(u'有效特征为:%s'%','.join(data.columns[rlr.get_support(indices=True)]))
x = data[data.columns[rlr.get_support(indices=True)]].as_matrix()

这个代码需要注意的是,.join(data.columns[rlr.get_support(indices=True)]这部分的包更新删减了,因此会报错。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

轻松看懂机器学习十大常用算法 - 基础知识

通过本篇文章可以对机器学习ML的常用算法有个常识性的认识,没有代码,没有复杂的理论推导,就是图解一下,知道这些算法是什么,它们是怎么应用的,例子主要是分类问题。 算法如下: 决策树随机森林算…

数据离散化 - 等宽等频聚类离散 - Python代码

目录 等宽离散 等频离散 聚类离散 附录: rolling_mean函数解释 cut函数解释 其他数据预处理方法 一些数据挖掘算法中,特别是某些分类算法(eg:ID3算法、Aprioroi算法等),要求数据是分类属性形式。因此常常需要将…

LeetCode 1444. 切披萨的方案数(DP)

1. 题目 给你一个 rows x cols 大小的矩形披萨和一个整数 k ,矩形包含两种字符: ‘A’ (表示苹果)和 ‘.’ (表示空白格子)。 你需要切披萨 k-1 次,得到 k 块披萨并送给别人。 切披萨的每一刀…

获取数据 - 将Excel文件读入矩阵matrix中 - Python代码

机器学习中,很多算法的计算逻辑是基于数学的,免不了求特征值和特征向量这种事情,因此,在数据预处理的时候,将数据源中的数据转储成矩阵格式是很有必要的。 原数据: 代码: import numpy as np…

Visual Studio 2010 调试 C 语言程序

转:http://woyouxian.net/c/using_visual_studio_write_pure_ansi_c_program.html 本篇文章讲述如何用微软的 Visual Studio 编写纯C语言程序,这里的纯C语言,指的是 ANSI C 语言。 要在 Visual Studio 里创建一个 ANSI C语言程序,…

Silverlight 4之旅(三)数据绑定(中)

在上篇文章中我们已经看过了绑定的基础知识,以及绑定数据源的选择问题。在本篇文章中我们看下绑定时Target的现实的问题。 自定义显示 很多时候我们的DataSource存储的数据并不可以直接用来显示,比如说我们对于Bool类型,需要显示为“是”或则…

LeetCode 第 28 场双周赛(505/2144,前23.6%)

文章目录1. 比赛结果2. 题目1. LeetCode 5420. 商品折扣后的最终价格 easy2. LeetCode 5422. 子矩形查询 medium3. LeetCode 5423. 找两个和为目标值且不重叠的子数组 medium4. LeetCode 5421. 安排邮筒 hard1. 比赛结果 两题选手😂,前两题很水&#xf…

决策树模型 - (ID3算法、C4.5算法) - Python代码实现

目录 算法简介 信息熵(Entropy) 信息增益(Information gain) - ID3算法 信息增益率(gain ratio) - C4.5算法 源数据 代码实现 - ID3算法 代码实现 - C4.5算法 画决策树代码-treePlotter 算法简介 决策数(Decision Tree)在机器学习中也是比较常见的一种算法&#xff0c…

重复值处理 - 清洗 DataFrame 中的各种重复类型 - Python代码

目录 所有列是否完全重复 指定某一列是否重复 根据多列判断是否重复,防止误删数据 其他数据预处理方法 通过八爪鱼或者火车头等采集器从全网抓取的数据中,总会存在各种各样的重复数据,为保证数据在使用过程中的准确性,总要先进…

Silverlight带关闭动画的内容控件,可移动的内容控件(一)

本例给大家介绍两个自定义控件&#xff0c;一个有显示和关闭两种状态&#xff0c;在状态切换时有动画效果。另外一个是可以拖动的内容控件&#xff0c;可以制作能拖动的面板。 A&#xff0e;带关闭动画的内容控件。 .xaml View Code <ResourceDictionary xmlns"htt…

Autodesk云计算系列视频 --- 云计算与Civil 3D

前面的视频介绍了云计算与AutoCAD/Revit/Inventor的结合&#xff0c;这一节是云计算与Civil 3D的结合例子&#xff1a; 演示中使用的云计算程序源代码可以从下面链接下载&#xff1a; The sample code used in the demonstration is available here. 转载于:https://www.cnblo…

模型评价 - 机器学习与建模中怎么克服过拟合问题?

上一篇博客链接&#xff1a; 机器学习与建模中 - 判断数据模型拟合效果的三种方法 在上一篇博客中&#xff0c;我们谈到了使用损失函数来判断模型的拟合效果。但是拟合效果比较好的模型不一定是最好的模型&#xff0c;建模的最终目的是为了预测&#xff0c;因此预测最精准的模…

因子分析模型

主成分分析和因子分析 #包载入 library(corrplot) library(psych) library(GPArotation) library(nFactors) library(gplots) library(RColorBrewer)1234567 主成分分析 主成分分析&#xff08;PCA&#xff09;是对针对大量相关变量提取获得很少的一组不相关的变量&#xff…

因子分析模型 - 案例按步骤详解 - (SPSS建模)

一、SPSS中的因子分析。 步骤: &#xff08;1&#xff09;定义变量&#xff1a;x1-财政用于农业的支出的比重,x2-第二、三产业从业人数占全社会从业人数的比重&#xff0c;x3-非农村人口比重&#xff0c;x4-乡村从业人员占农村人口的比重&#xff0c;x5-农业总产值占农林牧总…

神经网络 - 用单层感知器实现多个神经元的分类 - (Matlab建模)

训练样本矩阵&#xff1a; P [0.1 0.7 0.8 0.8 1.0 0.3 0.0 –0.3 –0.5 –1.5; 1.2 1.8 1.6 0.6 0.8 0.5 0.2 0.8 –1.5 –1.3]; 训练样本对应的分类&#xff1a; T [1 1 1 0 0 1 1 1 0 0 ;0 0 0 0 0 1 1 1 1 1]; 用MATLAB实现分类&…

缺失值处理 - 定位空值并用空值的上一个值填充 - (Excel)

今天小助理很烦恼&#xff0c;说要处理一批汇率的数据&#xff0c;用近邻日期的汇率填充汇率为空的日期的汇率&#xff0c;这句话比较拗口&#xff0c;我们用数据解释一下。 比如下表&#xff0c;10月6日和10月8日9日的汇率没有采集到&#xff0c;那么我们就用10月5日的汇率填…

C#开发基础类库

下载地址&#xff1a;http://files.cnblogs.com/dashi/Sxmobi.rar转载于:https://www.cnblogs.com/dashi/archive/2011/09/09/2172506.html

因子分析模型 - 因子分析法原理与代码实现 -(Python,R)

因子分析基本思想 和主成分分析相似&#xff0c;首先从原理上说&#xff0c;主成分分析是试图寻找原有自变量的一个线性组合&#xff0c;取出对线性关系影响较大的原始数据&#xff0c;作为主要成分。 因子分析&#xff0c;是假设所有的自变量可以通过若干个因子&#xff08;中…

ACDSee Photo Manager 12 中文绿色版

用WinRAR解压即玩&#xff0c;无需安装。可以拷贝到USB硬盘&#xff0c;便于携带 凭借易于使用且速度极快的特点&#xff0c;ACDSee 12提供了整理相片、优化拍摄以及与亲朋好友分享往事所需的全部功能。 幻灯片浏览 支持幻灯片浏览图片&#xff0c;并支持背景音乐和多种多样的图…

排序算法 - 6种 - 超炫的动画演示 - Python实现

1.冒泡排序 思路&#xff1a;遍历列表&#xff0c;每一轮每次比较相邻两项&#xff0c;将无序的两项交换&#xff0c;下一轮遍历比前一轮比较次数减1。 def bubble_sort(a_list):for passnum in range(len(a_list)-1, 0, -1):for i in range(passnum):if a_list[i] > a_list…