前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LogisticRegression实验

LogisticRegression实验

作者头像
听城
发布2018-04-27 15:59:05
7670
发布2018-04-27 15:59:05
举报
文章被收录于专栏:杂七杂八杂七杂八

实验目的

了解logistic regression的原理及在sklearn中的使用

实验数据

鸢尾花数据集是由杰出的统计学家R.A.Fisher在20世纪30年代中期创建的,它被公认为用于数据挖掘的最著名的数据集。它包含3种植物种类(Iris setosa、Iris versicolor和Iris virginica),每种各有50个样本。 下载地址:http://archive.ics.uci.edu/ml/datasets/Iris

LogisticRegression 主要参数介绍

代码语言:javascript
复制
class sklearn.linear_model.LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver=’liblinear’, max_iter=100, multi_class=’ovr’, verbose=0, warm_start=False, n_jobs=1)
  • penalty:正则化选择参数(惩罚项的种类): str, ‘l1’ or ‘l2’, default: ‘l2’ LogisticRegression默认带了正则化项。penalty参数可选择的值为"l1"和"l2".分别对应L1的正则化和L2的正则化,默认是L2的正则化。
  • class_weight :类型权重参数:(考虑误分类代价敏感、分类类型不平衡的问题)
    • class_weight参数用于表示分类模型中各种类型的权重,可以不输入,即不考虑权重,或者说所有类型的权重一样。如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者我们自己输入各个类型的权重,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%。
    • 如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。当class_weight为balanced时,类权重计算方法如下:n_samples / (n_classes * np.bincount(y))。n_samples为样本数,n_classes为类别数量,np.bincount(y)会输出每个类的样本数,例如y=[1,0,0,1,1],则np.bincount(y)=[2,3]
  • solver:优化算法选择参数default: ‘liblinear’ solver参数决定了我们对逻辑回归损失函数的优化方法,有四种算法可以选择,分别是:
    • liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
    • lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
    • newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
    • sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度

总结几种优化算法适用情况

正则参数

算法

介绍

L1

liblinear

liblinear适用于小数据集;如果选择L2正则化发现还是过拟合,即预测效果差的时候,就可以考虑L1正则化;如果模型的特征非常多,希望一些不重要的特征系数归零,从而让模型系数稀疏化的话,也可以使用L1正则化。

L2

liblinear

libniear只支持多元逻辑回归的OvR,不支持MvM,但MVM相对精确。

L2

lbfgs/newton-cg/sag

较大数据集,支持one-vs-rest(OvR)和many-vs-many(MvM)两种多元逻辑回归。

L2

sag

如果样本量非常大,比如大于10万,sag是第一选择;但不能用于L1正则化。

  • multi_class :分类方式选择参数default: ‘ovr’ OvR相对简单,但分类效果相对略差(这里指大多数样本分布情况,某些样本分布下OvR可能更好)。而MvM分类相对精确,但是分类速度没有OvR快。如果选择了ovr,则4种损失函数的优化方法liblinear,newton-cg,lbfgs和sag都可以选择。但是如果选择了multinomial,则只能选择newton-cg, lbfgs和sag了

实验过程

数据分析

该数据集共包括 150 行,每行为 1 个样本。每个样本有 5 个字段,凾别是:花萼长度 (单 位 cm)、花萼宽度(单位:cm)、花瓣长度(单位:cm)、花瓣宽度(单位:cm)、类别(共 3 类,分别是:Iris Setosa、Iris Versicolour、Iris Virginica)

实验代码

  • 导入相关包
代码语言:javascript
复制
### 导入相关包
import pandas as pd
from sklearn.linear_model import LogisticRegression
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn import metrics
  • 读取数据
代码语言:javascript
复制
data = pd.read_csv('./iris.csv',header=None)
x = data.values[:,:4]
y = data.values[:,4]
  • 分离测试集与训练集 x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=0)
  • 构造逻辑回归对象并预测
代码语言:javascript
复制
cls = LogisticRegression(penalty='l2',solver='newton-cg',multi_class='multinomial')
cls.fit(x_train,y_train)
y_pred = cls.predict(x_test)
  • 测试准确率
代码语言:javascript
复制
accuracy_score = metrics.accuracy_score(y_test,y_pred)   #错误率,也就是np.average(y_test==y_pred)
accuracy_score

结果分析

  • 针对不同的分类方式选择参数与优化算法参数可以得到不同的结果,有的结果甚至相差很多

分类方式选择参数

优化算法参数

准确率

multinomial

lbfgs

0.977

multinomial

newton-cg

0.977

multinomial

sag

0.955

ovr(默认)

liblinear(默认)

0.888

ovr

newton-cg

0.955

ovr

lbfgs

0.955

ovr

sag

0.933

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.03.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实验目的
  • 实验数据
  • LogisticRegression 主要参数介绍
  • 实验过程
    • 数据分析
      • 实验代码
        • 结果分析
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档