scikit-learn 笔记之逻辑回归

说明

  逻辑回归(logistic regression)虽然名字里包含的是回归,但却是统计学习中的经典分类算法。因为算法比较简单和经典,一般在比赛分类任务(特别二分类任务)中使用逻辑回归模型作baseline,另外因为逻辑回归的可解释性,一般金融行业中比较青睐。

逻辑回归

  在scikit-learn中LogisticRegression实现了逻辑回归模型,其原型为:

class sklearn.linear_model.LogisticRegression(penalty='l
2', *, 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:一个字符串,指定了正则化策略,默认’l2’。

  • 如果为’l1‘,则优化目标函数为: ∥ w ⃗ ∥ 1 + C L ( w ⃗ ) \left \| \vec{w} \right \|_{1}+CL\left ( \vec{w} \right ) w 1+CL(w ) C > 0 , L ( w ⃗ ) C>0,L\left ( \vec{w} \right ) C>0L(w )为极大似然函数
  • 如果为’l2’,则优化目标函数为: 1 2 ∥ w ⃗ ∥ 2 2 + C L ( w ⃗ ) \frac{1}{2}\left \| \vec{w} \right \|_{2}^{2}+CL\left ( \vec{w} \right ) 21w 22+CL(w ), C > 0 , L ( w ⃗ ) C>0,L\left ( \vec{w} \right ) C>0L(w )为极大似然函数。

dual:一个布尔值,默认为False。如果为True,则求解对偶形式(当penalty为’l2’且solver为‘liblinear’时有对偶形式),如果为False,则求解原始形式。
tol:一个浮点数,默认1e-4,指定判断迭代收敛与否的阈值。
C:一个浮点数,默认1.0。它制定了罚项系数的倒数。如果他的值越小,则正则化项越大。
fit_intercept:一个布尔值,默认为True。指定是否添加常数(截距或偏差)。
intercept_scaling:一个浮点数,默认为1。只有当solver='liblinear’才有意义。当采用fit_intercept时,相当于人造一个特征出来。
class_weight:为一个字典、字典列表、字符串‘balanced’,或者None,它指定了分类的权重。权重的形式{class_label: weight}。

  • 如果是None:每个分类的权重都为1。
  • 字符串‘balanced’:分类的权重是样本中 个分类出现的频率的反比。

random_state:一个帧数或者一个RandomState实例或者为None,默认为None。

  • 如果是整数:它指定了随机数生成器的种子。
  • 如果是RandomState:指定了一个随机数生成器。
  • 如果是None:使用默认的随机数生成器。

solver:一个字符串,默认为‘lbfgs’。指定了求解最优化问题的算法。

  • ‘newton-cg’:使用牛顿法。
  • ‘lbfgs’:使用L-BFGS拟牛顿法。
  • ‘liblinear’:使用liblinear。
  • ‘sag’:使用SAG(Stochastic Average Gradient)。
  • ‘saga’:使用SAGA,时SAG的一个加速版本。
    注意
  • 对于规模小的数据集,‘liblinear’比较适用;对于规模大的数据集,‘sag’和‘saga’比较适用。
  • ‘newton-cg’, ‘lbfgs’, ‘sag’ and ‘saga’ 处理penalty为‘l2’或者None的情况。
  • ‘liblinear’ and ‘saga’也支持penalty为‘l1’。
  • ‘saga’ 支持penalty为‘elasticnet’ 。
  • ‘liblinear’不支持penalty为None。

max_iter:一个整数,迭代次数,默认100。
multi_class:一个字符串,指定对于多分类问题的策略,默认’auto‘。

  • ‘auto’ : 如果数据时二分类或者solver = ‘multinomial’,选择‘over’,否则选择’multinomial’。
  • ‘ovr’ : 采用one-vs-rest策略。
  • ‘multinomial’ : 直接采用多分类逻辑回归策略。

verbose:一个正数,迭代次数,默认0。用于开启或关闭迭代中间输出日志功能。
warm_start:一个布尔值,默认为False。如果为True,那么适用前一次训练结果继续训练。否则从头开始训练。
n_jobs:一个正数,默认None。指定任务并行时的CPU数量。如果为-1则适用所有可用的CPU。
l1_ratio:一个浮点数,默认None,范围0到1。灵活设置penalty 参数,当penalty为’elasticnet’时。
属性
classes_:分类的标签值。
coef_:权重向量。
intercept_:添加到决策函数中的截距(又称偏差)。
n_iter_:实际迭代次数。
实例方法
decision_function(X):预测样本的置信分数。
densify():将系数矩阵转成稠密数组。
fit(X,y):训练模型。
get_params([deep]):获取模型参数信息。
predict(X):用模型进行预测,返回预测值。
predict_log_proba(X):返回一个数组,数组的元素一次是X预测为各个类别的概率的对数值。
predict_proba(X):返回一个数组,数组的元素一次是X预测为各个类别的概率值。
score(X, y[, sample_weight]):返回模型的预测性能得分。
set_params(**params):设置模型参数。
sparsify():将系数矩阵转成稀疏数组。

示例

数据集下载地址:良/恶性肿瘤数据集

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

/# 读取数据
column_names = ['Sample code number','Clump Thickness','Uniformity of Cell Size','Uniformity of Cell Shape','Marginal Adhesion','Single Epithelial Cell Size','Bare Nuclei','Bland Chromatin','Normal Nucleoli','Mitoses','Class']
dataSet = pd.read_csv("data/breast-cancer-wisconsin.data",names=column_names)
\# 将?替换为nan
dataSet = dataSet.replace(to_replace='?',value=np.nan)
/# 删除缺失值
dataSet = dataSet.dropna()
/# 拆分数据集
x_train, x_test, y_train, y_test = train_test_split(dataSet[column_names[1:10]], dataSet[column_names[10:]], test_size=0.33)
lr = LogisticRegression()
lr.fit(x_train,y_train)
lr.predict(x_test)
print("预测结果:",lr.score(x_test,y_test))

python代码

git地址:https://github.com/lingxiaaisuixin/MarchineLearning/tree/master/Logistic
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值