活用西瓜书——sklearn包中的对率回归算法LogisticRegression的使用

引言

最近在读西瓜书,查阅了多方资料,恶补了数值代数、统计概率和线代,总算是勉强看懂了西瓜书中的公式推导。但是知道了公式以后还是要学会应用的,几经摸索发现python下的sklearn包把机器学习中经典的算法都封装好了,因此,打算写几篇博客记录一下sklearn包下的常用学习算法的使用,防止自己以后忘了,嘿嘿。

1.对数几率回归算法

在分类任务中,我们希望根据训练样本,由事物的属性来对事物进行分类,这是典型的监督学习,我们理所当然地类比想到线性回归,线性回归是生成一个线性函数对事物属性xi进行加权相加,并对事物的y值(结果值)进行拟合。但是在分类任务中,结果是离散的,以二分类为例我们类比地引入“单位阶跃函数”(sigmoid函数)来对离散结果进行”连续化“,其表达式为:
sigmoid函数表达式
其图像为:
sigmoid函数)
我们可以看到,该函数在0的两端渐近线分别是0和1,这种良好的性质恰好可以用于分类任务。

2.推导思路

具体的推导过程挺复杂的,不是本文的重点,这一部分只说一下简单的思路。首先要引入指数族分布的定义以及指数族分布的三条假设(指数族分布-百度百科),利用三条假设结合特殊的指数族函数——伯努利,可以推出对率回归的损失函数(见西瓜书公式3.27),接着,分类问题就成了一个最优化问题,利用常见的最优化方法(梯度,牛顿等)都可求解了。

sklearn包下的对率回归——LogisticRegression的使用

sklearn包包含了很多机器学习的经典算法,我是用其中所带的LogisticRegression实现了对经典数据集iris的分类任务,以下为代码:

#本算法使用sklearn模块下的相关API对iris数据集的对数几率回归,实现分类任务
from sklearn.linear_model import LogisticRegression
from sklearn import datasets
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
import pandas as pd
from pandas import DataFrame
iris=datasets.load_iris()
df = DataFrame(iris.data, columns=iris.feature_names)
# pd.set_option('display.width',None)
tar=list(iris.target)
df['target']=tar
# print(df)
X = df.iloc[:,0:4].values#转成np.array类型以便作为参数传入分类器
Y = df.iloc[:,4].values
#train_test_split函数用来划分数据集和测试集,这个数据集量比较大,我们留百分之30作为测试集即可
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=0)
#对数据集进行标准化处理,如果是其他数据,要注意进行数据清洗
sc=StandardScaler()
#fit函数是获取整体样本的方差和均值,StandardScaler的使用方法就是要先fit在分别地测试集和训练集进行transform
sc.fit(X)
standard_train = sc.transform(X_train)
standard_test = sc.transform(X_test)
# print(standard_train)
#训练一个对率回归分类器,solver参数是采取的优化策略,一般用liblinear,即坐标轴下降法来进行优化
#solver可选值还有sag(梯度下降)、lbfgs(拟牛顿法)等
#C表示正则化系数的倒数,用来防治过拟合的。C越大正则化强度越小
lr = LogisticRegression(solver='liblinear',C=500.0,multi_class='ovr')
lr.fit(standard_train,Y_train)
#使用训练好的分类器对测试集进行预测
result=lr.predict(standard_test)
print(list(Y_test))
print(list(result))
#输出预测的准确率
print(lr.score(standard_test,Y_test))

运行结果

运行结果可以看到预测的准确率达到了百分之九十八,还算可以,我们可以接着调节参数(正则化系数,优化方法等)或采用交叉验证法来迭代训练分类器来对这个分类器进行优化。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值