【Logistic回归】原理及Python代码示例

来源:互联网 发布:tmplate可以写js 编辑:程序博客网 时间:2024/05/16 14:21

1、基本原理


1.1   Logistic分布


X是随机变量,X服从Logistic分布即X满足下式:


分布函数的图像如下:


X取值在正负无穷大之间,P(X)在0-1之间取值,呈S型单调上升曲线。

1.2   二项Logistic回归


二项Logistic回归中,X取值为实数,Y取值为0或1。Logistic回归模型如下:



x=(x1,x,2,...,xn,1),为样本输入,w=(w1,w2,...,wn,b)为权值向量,b为偏置。按照这个模型可以求得Y=1和Y=0的概率,将x分到概率大的那一类。

1.3   参数估计


给定训练集T={(x1,y1),(x2,y2),...,(xn,yn)},用极大似然估计法估计参数。设P(Y=1|x)=p,P(Y=0|X)=1-p,似然函数为


取对数得对数似然函数为:


对L(w)求最大值可得w的估计,常用方法是梯度下降法和拟牛顿法等。

1.4   多项式Logistic回归

以上介绍的二项Logistic回归模型是二类问题,只用于Y=0或1的情况。对于Y有多种类别的情况,可将其推广到多项式Logistic回归。设Y的取值为{1,2,...,K},则多项式Logistic回归模型为:



参数估计的方法也可从二项Logistic回归的方法推广过来。

2、Python代码示例

调用scikit-learn机器学习库实现朴素贝叶斯分类器。数据文件wine data 点这里下载,在右侧可以找到“wine”连接,下载wine.data文件。这是意大利三种酒的分类数据,包含了13种不同的酒的属性,共分成3类,分别标记为“1”、“2”、“3”。每行为一个样本数据,第一列为酒的种类,后13列为酒的属性,一共178个样本。源代码如下:

import scipy as spimport numpy as npfrom sklearn.cross_validation import train_test_splitfrom sklearn import metricsfrom sklearn.linear_model import LogisticRegressionx=np.loadtxt("wine.data" , delimiter = "," , usecols=(1,2,3,4,5,6,7,8,9,10,11,12,13) )      #获取属性集y=np.loadtxt("wine.data" , delimiter = "," , usecols=(0) )                                  #获取标签集print(x)     #查看样本# 加载数据集,切分数据集80%训练,20%测试x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)         #切分数据集#调用逻辑斯特回归model = LogisticRegression()model.fit(x_train, y_train)print(model)       #输出模型# make predictionsexpected = y_test                       #测试样本的期望输出predicted = model.predict(x_test)       #测试样本预测#输出结果print(metrics.classification_report(expected, predicted))       #输出结果,精确度、召回率、f-1分数print(metrics.confusion_matrix(expected, predicted))            #混淆矩阵



运行结果如下:


关于精确度、召回率、f1分数等概念请参考这篇文章最后部分。多次实验,发现分类正确率可达90%以上,分类效果不错。




0 0