逻辑回归 logit
[方法转]http://www.powerxing.com/logistic-regression-in-python/
http://blog.csdn.net/lipengcn/article/details/49592221
机器学习公开课:http://www.cnblogs.com/python27/p/MachineLearningWeek03.html
逻辑回归梯度下降法详解:http://blog.csdn.net/lookqlp/article/details/51161640
http://blog.sae.sina.com.cn/archives/3888
不调用包:http://blog.csdn.net/zouxy09/article/details/20319673
http://blog.csdn.net/lsldd/article/details/41551797
参数调优:http://www.weixinla.com/document/31127980.html
【总结】
逻辑回归找到最优化的参数有2种方法,这两种方法得出的最优结果是一致的,有时候容易弄混淆。这里总结一下:
方法1:利用最大似然函数方法(样本出现概率最大)
参考上述【http://blog.csdn.net/lookqlp/article/details/51161640】
求出每个样本出现的概率,再把所有样本出现的概率表达式计算出来,利用最大似然函数求出整体出现概率最大时的参数θ。
预测函数:


按照求最大似然函数的方法,逻辑回归似然函数:

我们的目标是求最大l(θ)时的θ,如上函数是一个上凸函数,可以使用梯度上升来求得最大似然函数值(最大值)。或者上式乘以-1,变成下凸函数,就可以使用梯度下降来求得最小负似然函数值(最小值):
可以在似然函数前加一个1/m,构成与线性回归类似形式的损失函数:
J(θ)=−(1/m)*l(θ)
利用梯度下降法求出θ即可。
方法2:利用损失函数最小法
参考:【 http://www.cnblogs.com/python27/p/MachineLearningWeek03.html】
构造预测函数:

解释:

此外由于y只能取0或者1两个值,换句话说,一个数据要么属于0分类要么属于1分类,假设已经知道了属于1分类的概率是p,
那么当然其属于0分类的概率则为1-p,这样我们有以下结论:

构造损失函数:(注意与线性模型的损失函数不同)

简化上述函数形式,即得最终损失函数:

m是样本数,是平均误差损失loss的,预防两次样本不一样导致的损失函数值差异很大。
**【注意】方法2的损失函数与方法1的似然函数完全一致。而且也是用梯度下降方法找出时损失函数最小的θ,故结果与方法1是一致的。
***梯度下降的方法的推导:


自己 写的实例:
源数据excel表,内容如下:
| age | amount | grade | gender |
| 18 | 208182 | 6 | 0 |
| 18 | 26141 | 8 | 1 |
| 18 | 325354 | 9 | 0 |
| 18 | 183147 | 5 | 1 |
| 18 | 13923 | 5 | 1 |
import os
import codecs
import numpy as np
import pandas as pd
import statsmodels.api as sm
import pylab as pl
import csv
#数据读入,变量准备
os.chdir('/Users/zhangb/Desktop/python学习文件')
df=pd.read_excel('model.xlsx','工作表1')
dummy_ranks=pd.get_dummies(df['gender'],prefix='gender') #定义哑变量
cols_to_keep=['age','amount','grade']
data=df[cols_to_keep].join(dummy_ranks.ix[:,'gender_1':]) #分2类,保留一个哑变量类别
#print(data.head())
data['intercept']=1 #加入截距项
# 执行逻辑回归 把gender当做要预测的分类变量
trains=data.columns[0:3]
logit=sm.Logit(data['gender_1'],data[trains])
result=logit.fit()
#print(result.summary())
#预测
import copy
combos=copy.deepcopy(data)
pred=combos.columns[0:3]
combos['intercept']=1
combos['predict']=result.predict(combos[pred])
a=result.predict(combos[pred])
total=0
hit=0
for value in combos.values: #统计预测效果
predict=value[-1]
gender=int(value[3])
if predict >0.5:
total +=1
if gender==1:
hit +=1
#输出结果
print('total:%d,hit:%d,precision:% .2f' %(total,hit,100*hit/total))
print(combos.head())
print(pred)
print(a[1:10])
#结果导入csv;txt文件
vv=combos.values #去除pandas数据的所有值
pp=list(vv)
#结果数据导入csv文件
with open ('output.csv','w',newline='') as data2:
bb=csv.writer(data2,dialect=('excel'))
bb.writerow(['age','amount','grade','gender_1','intercept','predict'])
bb.writerows(pp)
data2.close
#结果数据导入txt文件
f1=open('out.txt','w')
for i in pp:
a1=list(i)
a2=str(a1)[1:-1].replace(',','')
f1.write(a2+'\n')
f1.close()
=============完========
#小练习语句
#df = pd.read_csv('model.csv','r',encoding='gbk')
#print(df.head())
#print (df['gender'][0:4])
#print(df.columns)
#print (df.describe())
#print (df.std())
#print(df[0:3])
#print(df.head())
#print(df.iloc[0:3,1:3])
#print(pd.crosstab(df['gender'],df['grade'],rownames=['gender'])) 交叉表
#df.hist()
#pl.show()
逻辑回归 logit的更多相关文章
- 逻辑回归 Logistic Regression
逻辑回归(Logistic Regression)是广义线性回归的一种.逻辑回归是用来做分类任务的常用算法.分类任务的目标是找一个函数,把观测值匹配到相关的类和标签上.比如一个人有没有病,又因为噪声的 ...
- 用R做逻辑回归之汽车贷款违约模型
数据说明 本数据是一份汽车贷款违约数据 application_id 申请者ID account_number 账户号 bad_ind 是否违约 vehicle_year ...
- 逻辑回归算法的原理及实现(LR)
Logistic回归虽然名字叫"回归" ,但却是一种分类学习方法.使用场景大概有两个:第一用来预测,第二寻找因变量的影响因素.逻辑回归(Logistic Regression, L ...
- Python实践之(七)逻辑回归(Logistic Regression)
机器学习算法与Python实践之(七)逻辑回归(Logistic Regression) zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习算法与Pyth ...
- 逻辑回归:使用SGD(Stochastic Gradient Descent)进行大规模机器学习
Mahout学习算法训练模型 mahout提供了许多分类算法,但许多被设计来处理非常大的数据集,因此可能会有点麻烦.另一方面,有些很容易上手,因为,虽然依然可扩展性,它们具有低开销小的数据集.这样一个 ...
- 利用TensorFlow实现多元逻辑回归
利用TensorFlow实现多元逻辑回归,代码如下: import tensorflow as tf import numpy as np from sklearn.linear_model impo ...
- 逻辑回归原理_挑战者飞船事故和乳腺癌案例_Python和R_信用评分卡(AAA推荐)
sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...
- 逻辑回归--美国挑战者号飞船事故_同盾分数与多头借贷Python建模实战
python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...
- 转载:逻辑回归的python实现
转载自:http://blog.csdn.net/zouxy09/article/details/20319673 一.逻辑回归(LogisticRegression) Logistic regres ...
随机推荐
- lufen登录注册
创建精写报错信息表用于记录错误信息(新的文件夹,创建新的py) #静写报错信息class BaseResponse(object): def __init__(self): self.code=100 ...
- linux下mysql-5.6忘记root密码,重置root密码详细过程
在linux平台下使用mysql过程中忘记了root密码,对于运维和DBA来讲都是一件头疼的事情,下面来讲解下怎么进行重置mysql数据库root 密码: 1.首先停止mysql服务进程: 1 s ...
- java中六个时间类的使用和区别
java.util.Date java.sql.Date java.sql.Time java.sql.Timestamp java.text.SimpleDateFormat java.ut ...
- mongodb的副本集|备份|恢复备份
复制(副本集) 什么是复制 复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性,并可以保证数据的安全性 复制还允许从硬件故障和服务中断中恢复数据 为什么要复制 数据备份 数据灾 ...
- 20.纯 CSS 为母亲节创作一颗像素画风格的爱心
原文地址:https://segmentfault.com/a/1190000014837536 感想: 网格grid 又来了: fr : (剩余空间长度)单位, 1.当(50px,nfr),nfr代 ...
- jenkins部署配置
https://www.cnblogs.com/rslai/p/8135460.html 修改jenkins的默认端口号: https://blog.csdn.net/qq_32440951/arti ...
- react-native获取设备信息app版本信息,react-native-device-info
安装 yarn add react-native-device-info react-native link react-native-device-info link 之后就可以直接使用了,ios ...
- 浅谈 volatile 的实现原理
在并发编程中我们一般都会遇到这三个基本概念:原子性.可见性.有序性.我们稍微看下volatile 原子性 原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行. ...
- 机器学习进阶-案例实战-图像全景拼接-图像全景拼接(RANSCA) 1.sift.detectAndComputer(获得sift图像关键点) 2.cv2.findHomography(计算单应性矩阵H) 3.cv2.warpPerspective(获得单应性变化后的图像) 4.cv2.line(对关键点位置进行连线画图)
1. sift.detectAndComputer(gray, None) # 计算出图像的关键点和sift特征向量 参数说明:gray表示输入的图片 2.cv2.findHomography(kp ...
- jsfl 常用自定义方法
//创建文件夹 function creatFile(fileURl) { if (FLfile.createFolder(fileURl)) { //alert("创建成功 "+ ...