欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

逻辑回归实战--R/python代码

程序员文章站 2024-03-26 09:01:23
...

 逻辑回归实战--R/python代码 

目录

  

逻辑回归

1、R语言实现:

1.1 传统统计学算法

代码解析

结果查看:

1.2机器学习:

2、python代码实现

2.1传统统计学思想

2.2 python机器学习思想

总结:


逻辑回归

又称logistic回归分析,是一种广义的线性回归分析模型;

与多重线性回归的最大区别就是因变量不同,多重线性回归因变量是连续的,而逻辑回归是二项分布(其实逻辑回归的因变量可以是二分类,也可以是多分类,但是二分类更为常用)。

    逻辑回归主要思想是把线性函数,运用Sigmoid函数(逻辑函数或者增长函数)将因变量映射在(0,1)区间上,本文主要是讲代码实战,所以不过多分析模型算法和推导。

逻辑回归实战--R/python代码

1、R语言实现:

R是所有统计工具里面比较简单上手的一个,学习R不需要任何语言基础,只需要加载相关的包,几行代码就可以轻松实现。

1.1 传统统计学算法

代码解析

 逻辑回归实战--R/python代码

data<-read.table("/Users/admin/Desktop/模型数据/model.csv",header=TRUE,sep=",")
fit.logit<-glm(y~.,data=data,family=binomial())
summary(fit.logit)

结果查看:

逻辑回归实战--R/python代码 


从上面结果可以看出,包括常数项所有参数估计值全部是显著的。

(PS:如果只有部分变量是显著的话(比如:x1、x2、x3是显著的),代码可以改成:fit.logit<-glm(y~x1+x2+x3,data=data,family=binomial()),y~后面跟“.”,默认因变量与所有自变量进行拟合求解,binomial表示因变量为二分类)


        以上为传统统计建模思想,只需要根据参数的显著性来判定模型的拟合优度,但是现在比较流行的机器学习算法,基本不看参数的显著性,主要根据最终的准确率或召回率来评价模型的优劣,在这里我们也介绍下机器学习的逻辑回归的实现。

        首先我们先用tensor flow的流程(阿里云机器学习平台PAI)来看一下,机器学习的视线流程:

逻辑回归实战--R/python代码

机器学习的主要思想就是:

把数据集拆分成训练集和测试集,用训练集来进行建模,测试集进行检验,

最后根据混淆矩阵的总体精准度和召回率来评判模型。


1.2机器学习:

下面我们用R把机器学习思想进行实现

逻辑回归实战--R/python代码

tt<-sample(2,nrow(data),replace=T,prob=c(0.7,0.3)) 
train<-data[tt==1,]
test<-data[tt==2,]

逻辑回归实战--R/python代码

fit.logit<-glm(y~.,data=train,family=binomial()) 
predict<-predict(fit.logit,type='response',newdata=test)
real<-test$y
res<-data.frame(real,predict=ifelse(predict>0.5,'t','f'))
table(real,predict=ifelse(predict>0.5,'t','f'))

混淆矩阵结果:

逻辑回归实战--R/python代码

关于混淆矩阵的理解可以参考:混淆矩阵

至此,R实现逻辑回归的算法的代码已经全部介绍完,下面附录一份完整代码:

data<-read.table("/Users/admin/Desktop/模型数据/model.csv",header=TRUE,sep=",")
fit.logit<-glm(y~.,data=data,family=binomial())
summary(fit.logit)

tt<-sample(2,nrow(data),replace=T,prob=c(0.7,0.3))
train<-data[tt==1,]
test<-data[tt==2,]
fit.logit<-glm(y~.,data=train,family=binomial())
predict<-predict(fit.logit,type='response',newdata=test)
real<-test$y
res<-data.frame(real,predict=ifelse(predict>0.5,'t','f'))
table(real,predict=ifelse(predict>0.5,'t','f'))

2、python代码实现

2.1传统统计学思想

逻辑回归实战--R/python代码

逻辑回归实战--R/python代码

逻辑回归实战--R/python代码

从上面结果可以看出,所有参数估计值全部是显著的(与R数据源是一致的)。

由于很少有人用python来看统计显著性,所以大部分python需要

将缺少的函数分配回scipy.stats命名空间中:

stats.chisqprob = lambda chisq,df: stats.chi2.sf(chisq, df)

逻辑回归实战--R/python代码

逻辑回归实战--R/python代码逻辑回归实战--R/python代码

附录代码:

import pandas as pd

data=pd.read_csv("model.csv")

y=data["y"]

col_names = data.columns.tolist()
x_col=col_names[1:]
x=data[x_col]

print(x.describe())

import statsmodels.api as sm
result = sm.Logit(y,x).fit()

from scipy import stats
stats.chisqprob = lambda chisq, df: stats.chi2.sf(chisq, df)

print(result.summary())

predictions = result.predict(x)
predictions[predictions > .5] = 1
predictions[predictions <=.5] = 0
from sklearn.metrics import confusion_matrix
confusion_matrix(y, predictions)
import matplotlib.pyplot as plt
plt.matshow(aa)
plt.title("predict")
plt.colorbar()
plt.ylabel("real")
for x in range(len(aa)):  # 数据标签 
	for y in range(len(aa)):
        		plt.annotate(aa[x, y], xy=(x, y), horizontalalignment='center', verticalalignment='center', color='red')
plt.show()

2.2 python机器学习思想

逻辑回归实战--R/python代码

逻辑回归实战--R/python代码

from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.3)

from sklearn.linear_model.logistic import LogisticRegression
classifier=LogisticRegression()
classifier.fit(X_train,y_train)

predictions=classifier.predict(X_test)

confusion_matrix=confusion_matrix(y_test, predictions)

总结:


        基于上述分析和代码拆解,逻辑回归的问题基本可以解决了,当然如果想要深入挖掘还有很多东西可以加进来,比如前面说的交叉验证、正则化惩罚项以及梯度下降优化精准度等。