语法格式
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='lbfgs', max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)
常用参数解释:
- penalty: 指定正则项,也称惩罚项,接受
"l1"
,"l2"
,"elasticnet"
(添加"l1"
和"l2"
罚分),"None"
(不添加罚分)。默认为"l2"
。 - solver: 在逻辑回归损失函数的优化问题中使用的算法,接受
‘lbfgs’
,‘liblinear’
,‘newton-cg’
,‘newton-cholesky’
,‘sag’
,‘saga’
,default="lbfgs"
。对于小数据集,选择"liblinear"
合适,对于大数据集,选择"sag"
和"saga"
更快;对于多类问题,仅"newton-cg"
、"sag"
,"saga"
和"lbfgs"
处理多项损失;"liblinear"
则仅限于 one-versus-rest 方案;‘newton-cholesky’
对于n_samples >> n_features的情况是一个很好的选择,特别是对于具有稀有类别的one-hot encoded分类特征,它仅限于二元分类和多类分类的one-versus-rest reduction。注:算法的选择取决于所选择的penalty。"liblinear"
和"saga"
支持"l1"
;"newton-cg"
,"sag"
,"liblinear"
,"saga"
,"newton-cholesky"
和"lbfgs"
支持"l2"
;"saga"
支持"elasticnet"
;"newton-cg"
,"sag"
,"saga"
,"newton-cholesky"
和"lbfgs"
支持“None”
。只有在具有大致相同scale的特征上,“sag”
和“saga”
才能实现快速收敛。 - dual: 接受布尔值,表示是否选择对偶。默认为
False
。dual公式仅适用于使用liblinear
的l2
惩罚选项。当n_samples > n_features时选择dual=False
更优。 - tol: 接受float, default=1e-4。表示迭代终止的误差阈值。
- C: float,表示正则化系数的倒数。 default=1.0,表示损失函数与正则项的比例为1:1。C值越小,表明正则化越强。
- random_state: 接受int, RandomState instance, default=None,用来设置随机数种子。当
solver
== "sag", "saga"或"liblinear"时,使用此参数来洗牌数据。
代码示例
penalty和C
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
#导入数据
mydata = load_breast_cancer()
X = mydata.data
print(X.shape)
y = mydata.target
print(y.sum())
#选择训练集和测试集
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=100,stratify=y)
print(y_test.sum())
#使用逻辑回归模型进行二分类
#L1正则化
LR_classifier_l1 = LogisticRegression(penalty="l1",solver="liblinear",random_state=200,max_iter=1000)
LR_classifier_l1 = LR_classifier_l1.fit(X_train,y_train)
print(LR_classifier_l1.coef_) #查看每个特征对应的参数
print((LR_classifier_l1.coef_ != 0).sum(axis=1)) #特征不为0的数目
#L2正则化,并确实合适的C值
LR_train_L2 = []
LR_test_L2 = []
for i in np.linspace(0.05,1.5,19):
LR_classifier_l2 = LogisticRegression(penalty="l2",solver="liblinear",random_state=200,C=i,max_iter=1000)
LR_classifier_l2 = LR_classifier_l2.fit(X_train,y_train)
LR_classifier_l2.coef_ #查看每个特征对应的参数
(LR_classifier_l2.coef_ != 0).sum(axis=1) #特征不为0的数目
LR_train_L2.append(accuracy_score(LR_classifier_l2.predict(X_train),y_train))
LR_test_L2.append(accuracy_score(LR_classifier_l2.predict(X_test),y_test))
graph = [LR_train_L2,LR_test_L2]
label = ["LR_train_L2","LR_test_L2"]
color = ["black","red"]
plt.figure(figsize=(5,5))
for i in range(len(graph)):
plt.plot(np.linspace(0.05,2,19),graph[i],color[i],label=label[i])
plt.legend(loc=2)
plt.show()
输出结果
(569, 30)
357
107
[[ 6.14368826 0.03201005 -0.43422785 -0.00929713 0. 0.
0. 0. 0. 0. 0. 0.
0.3325014 -0.06415746 0. 0. 0. 0.
0. 0. 0. -0.27739672 -0.138606 -0.02189744
0. 0. -1.20617611 0. 0. 0. ]]
[10]
从上图可以看到,随着C值的增大,模型在训练集上的准确率呈逐渐增高趋势,但模型在测试集上则是先增高再下降,下降趋势的出现表明模型出现了过拟合。所以,C值应该选在0.8附近较合适。
标签:LogisticRegression,linear,分类器,train,l2,l1,test,LR,classifier From: https://www.cnblogs.com/chaimy/p/17259901.html