Scikit_Learn中的Logistic回归模型实现

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。

C:交叉熵损失函数系数,缺省:1。

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)。

你可能感兴趣的:(Scikit_Learn中的Logistic回归模型实现)