您的位置:首页 > 编程语言 > Python开发

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

2018-08-19 10:36 225 查看

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

目录

  

逻辑回归

1、R语言实现:

1.1 传统统计学算法

代码解析

结果查看:

1.2机器学习:

2、python代码实现

2.1传统统计学思想

2.2 python机器学习思想

总结:

逻辑回归

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

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

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

1、R语言实现:

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

1.1 传统统计学算法

代码解析

 

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

结果查看:

 

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

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

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

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

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

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

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

1.2机器学习:

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

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

[code]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实现逻辑回归的算法的代码已经全部介绍完,下面附录一份完整代码:

[code]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来看统计显著性,所以大部分python需要

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

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

附录代码:

[code]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机器学习思想

[code]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)

总结:


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

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: