逻辑回归

  • 说明
  • 逻辑回归
  • 示例
  • python代码


说明

  逻辑回归(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‘,则优化目标函数为:逻辑回归可视化代码 逻辑回归sklearn_sklearn逻辑回归可视化代码 逻辑回归sklearn_逻辑回归可视化代码_02为极大似然函数
  • 如果为’l2’,则优化目标函数为:逻辑回归可视化代码 逻辑回归sklearn_逻辑回归可视化代码_03,逻辑回归可视化代码 逻辑回归sklearn_逻辑回归可视化代码_02为极大似然函数。

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