LogisticRegression:给定正则参数C对应的Logistic回归。
LogisticRegressionCV:在一组正则参数Cs中寻找最佳C的Logistic回归。
SGDClassifier:可实现采用随机梯度下降优化的Logistic回归。
LogisticRegression
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)
支持两种正则:L2正则和L1正则。但L1正则函数不连续,优化器只能选择‘liblinear’和'saga'。正则参数为:penalty、C
支持两种多类分类方式:‘ovr’和‘multinomial’。模型参数为multi_class。
支持多种优化方式,需注意不同优化方法的适用范围。优化器参数为:solver。
支持对不同类别样本权重设置,权重参数:class_weight
LogisticRegression的参数
penalty:惩罚函数/正则函数,支持L2正则和L1正则,缺省:L2。L1正则的优化器可选‘liblinear’和‘saga’。
dual:原问题(primal)还是对偶问题求解。对偶只支持L2正则和‘liblinear’优化器。缺省:False。当样本数n_samples>特征数目n_features时,原问题求解更简单。
tol:迭代终止判断的误差范围。缺省:1e-4。
fit_intercept:是否在决策函数中加入截距项。缺省:True。如果数据已经中心化,可以不用。
intercept_scaling:截距缩放因子,当fit_intercept为True且liblinear对solver有效。输入为[x,self.intercept_scaling],即对输入特征加入1维常数项。增加的常数项系数也受到l1/l2正则的惩罚,所以要适当正则常数项。
class_weight:不同类别样本的权重,用户指定每类样本权重或‘balanced’(每类样本权重与该类样本出现比例成反比)。缺省:None。
random_state:数据洗牌时的伪随机数。缺省:None。如希望每次运行结果相同,设置random_state为一正数。
solver:优化求解算法,可为‘newton-cg’,‘lbfgs’,‘liblinear’,‘sag’,’‘saga’。缺省:liblinear。L1正则的优化器可选'liblinear'和‘saga’。
max_iter:最大迭代次数,当solver为newton-cg,sag,lbfgs时有效。缺省:100。
multi_class:多类分类处理策略,可为'over','multinomial'。'over'为1对多,将多类分类转化为多个两类分类问题,multinomial为softmax分类。缺省:'ovr'。multinomial的优化器只支持newton-cg,lbfgs和sag。OvR相对简单,但分类效果相对略差。MvM分类相对准确,但是分类速度没有OvR快。
verbose:是否详细输出
warm_start:是否热启动(用之前的结果作为初始化),对liblinear_solver无效。缺省:False。
n_jobs:多线程控制,缺省值1。取-1时算法自动检测可用CPU核,并使用全部核。
LogisticRegression的属性
coef_:回归系数/权重,与特征维数相同。如果是多任务回归,标签y为二维数组,则回归系数也是二维数组。
intercept_:截距项。
n_iter_:每个类的迭代次数。
LogisticRegression的方法
fit(X,y[,sample_weight]):模型训练。参数X,y为训练数据,也可以通过sample_weight设置每个样本的权重。
predict(X):返回X对应的预测值(类别标签)
predict_log_proba(X):返回X对应的预测值(每个类别对应的概率的log值)
predict_proba(X):返回X对应的预测值(每个类别对应的概率)
decision_function(X):返回X对应的预测值(置信值,样本到决策超平面的带符号距离)
score(X,y[,sample_weight]):评估模型预测性能,返回模型预测的正确率。
densify():如果之前将系数举证变成了稀疏模式,再将其变回稠密模式(fit函数的格式)
sparsify():将系数矩阵变成了系数模式
LogisticRegression VS. LogisticRegressionCV
给定一个正则参数C:LogisticRegression
class sklearn.linear_model.LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_interce pt=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)
在一组正则参数CS中找最佳的C:LogisticRegressionCV
class sklearn.linear_model.LogisticRegressionCV(Cs=10, fit_intercept=True, cv=None, dual=False, penalty=’l2’, scoring=None, solver=’lbfgs’, tol=0.0001, max_iter=100, class_weight=None, n_jobs=1, verbose=0, refit=True, i ntercept_scaling=1.0, multi_class=’ovr’, random_state=None)
额外与CV有关的参数:
Cs:在区间的log域均匀取Cs个值作为正则参数C的搜索空间。
cv:交叉验证划分策略。
注意:
默认的slover变成了‘lbfgs’
对多类分类问题,采用的是'ovr'的方式,用交叉验证得到每个类的正则参数。
SGDClassifier
类似SGDRegressor,Scikit-Learn中的实现了随机梯度下降分类:SGDClassifier
SGDClassifier对于大数据量训练集(样本数,特征数目)问题合适。
class sklearn.linear_model.SGDClassifier(loss=’hinge’, penalty=’l2’, alpha=0.0001, l1_ratio=0.15, fit_interc ept=True, max_iter=None, tol=None, shuffle=True, verbose=0, epsilon=0.1, n_jobs=1, random_state=Non e, learning_rate=’optimal’, eta0=0.0, power_t=0.5, class_weight=None, warm_start=False, average=False, n_iter=None))
支持的损失函数loss包括:
‘hinge’:合页损失(SVM)
'log':负log似然损失(Logistic回归)
‘modified_huber’:对噪声不损失
‘squared_hinge’
'perceptron'
回归中用到的loss:‘squared_loss’,‘huber’,‘epsilon_insensitive’,‘squared_epsilon_insensitive’
参数epsilon是某些损失函数(huber、epsilon_insensitive、squared_epsilon_insensitive)需要的额外参数。
支持的正则函数penalty包括:
‘none’:无正则
‘l2’:L2正则
‘l1’:L1正则
‘elasticnet’:L1正则+L2正则(参数l1_ratio为L1正则比例)
参数alpha是正则惩罚系数,也用于学习率计算。目标函数为:
相关优化的参数包括:
max_iter:最大迭代次数(访问训练数据的次数,epoches的次数)。SGD在接近的训练样本时收敛。因此可将迭代数设置成np.ceil(/N),其中N是训练集的样本数目。默认值是5。参数n_iter意义相同,已被抛弃。
tol:停止条件。如果非None,当(loss>previous_loss - tol)时迭代终止。
shuffle:每轮SGD之前是否重新对数据进行洗牌。
random_state:随机种子,Scikit-Learn中如随机有关的算法均有此参数,含义相同。当参数shuffle==True时用到。如果随机种子相同,每次洗牌得到的结果一样。可设置为某个整数。
learning_rate:支持三种方式:
constant:eta = eta0
optimal:eta = 1.0/(alpha * (t + t0))
invscaling:eta = eta0/pow(t,power_t)
warm_start:是否从之前的结果继续。随机梯度下降中初始值可以是之前的训练结果,支持在线学习。初始值可在fit函数中作为参数传递。
average:是否采用平均随机梯度下降法(ASGD)。