逻辑回归
- 说明
- 逻辑回归
- 示例
- 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‘,则优化目标函数为:,为极大似然函数
- 如果为’l2’,则优化目标函数为:,为极大似然函数。
❐ 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