逻辑回归实战--R/python代码
逻辑回归实战--R/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)
总结:
基于上述分析和代码拆解,逻辑回归的问题基本可以解决了,当然如果想要深入挖掘还有很多东西可以加进来,比如前面说的交叉验证、正则化惩罚项以及梯度下降优化精准度等。
- 机器学习:逻辑回归与Python代码实现
- MXnet代码实战之多类逻辑回归
- 读书笔记:机器学习实战(4)——章五的逻辑回归代码和个人理解
- 逻辑回归Python代码
- 逻辑回归-非线性判定边界Python代码实现
- python逻辑回归代码实例
- Python机器学习实战之逻辑回归
- 逻辑回归-线性判定边界Python代码实现
- 逻辑回归原理(python代码实现)
- 【Python学习系列十七】基于scikit-learn库逻辑回归训练模型(delta比赛代码2)
- Logistic Regression 逻辑回归算法例子,python代码实现
- 【Python学习系列十八】基于scikit-learn库逻辑回归训练模型(delta比赛代码3)
- [深度学习]Python/Theano实现逻辑回归网络的代码分析
- python机器学习理论与实战(四)逻辑回归
- 【Python学习系列十六】基于scikit-learn库逻辑回归训练模型(delta比赛代码)
- Python机器学习与实战笔记之逻辑斯蒂回归Logistic Regression, LR
- 机器学习-逻辑回归(python3代码实现)
- [深度学习]Python/Theano实现逻辑回归网络的代码分析
- Python实战四.逻辑回归
- 逻辑回归与二元分类——含python代码