了解logistic regression的原理及在sklearn中的使用
鸢尾花数据集是由杰出的统计学家R.A.Fisher在20世纪30年代中期创建的,它被公认为用于数据挖掘的最著名的数据集。它包含3种植物种类(Iris setosa、Iris versicolor和Iris virginica),每种各有50个样本。 下载地址:http://archive.ics.uci.edu/ml/datasets/Iris
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)
总结几种优化算法适用情况
正则参数 | 算法 | 介绍 |
---|---|---|
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正则化。 |
该数据集共包括 150 行,每行为 1 个样本。每个样本有 5 个字段,凾别是:花萼长度 (单 位 cm)、花萼宽度(单位:cm)、花瓣长度(单位:cm)、花瓣宽度(单位:cm)、类别(共 3 类,分别是:Iris Setosa、Iris Versicolour、Iris Virginica)
### 导入相关包
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
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)
cls = LogisticRegression(penalty='l2',solver='newton-cg',multi_class='multinomial')
cls.fit(x_train,y_train)
y_pred = cls.predict(x_test)
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 |