logistic 回归
1. 什么是logistic回归
逻辑回归(Logistic Regression),简称LR。它的特点是能够是我们的特征输入集合转化为0和1这两类的概率。一般来说,回归不用在分类问题上,因为回归是连续型模型,而且受噪声影响比较大。如果非要应用进入,可以使用逻辑回归。
Logistic回归本质上是线性回归,只是在特征到结果的映射中加入了一层函数映射,即先把特征线性求和,然后使用函数g(z)将最为假设函数来预测。g(z)可以将连续值映射到0和1上。Logistic回归用来分类0/1问题,也就是预测结果属于0或者1的二值分类问题
logistic回归的sigmoid的函数如下:
2.损失函数的定义:
也可以写成一个函数:
得到损失函数的定义后最终我们将损失函数推广到计算所有样本的平均值,
这就是我们得到的成本函数的定义。
最后⽬标变成取J(θ)最⼩值时的θ为最佳参数。
这个函数就是我们逻辑回归(logistics regression)的损失函数,我
们叫它交叉熵损失函数。
3.采用梯度下降法求解损失函数
原理:
把所有参数的偏导数构成的⼀个向量,就叫做梯度
梯度代表函数在当前位置增⻓最快的⽅向
所以我们如果想要让函数值最快速的减⼩,需要向梯度的反⽅向移动。
计算出梯度之后,我们就可以利⽤梯度对所有的参数θ 进⾏更新。
更新之后,在新的参数θ 基础上,再次计算梯度,然后再次更新。
就这样不断进⾏迭代,逐渐降低损失函数的值。
4.logistic回归在sklearn中的实现:
sklearn.linear_model.LogisticRegression
参数说明:
1、 penalty:{‘l1’, ‘l2’, ‘elasticnet’, ‘none’}, default=’l2’
惩罚, 模型有可能会过拟合, 想办法组织模型过度拟合数据.
用于指定惩罚中使用的规范。 “newton-cg”,“ sag”和“ lbfgs”求解器仅支持l2惩罚。
“elasticnet”仅受“saga”求解器支持。 如果为“none”(liblinear求解器不支持),则不应用任何正则化。L1正则化, 和L2正则化.
L1倾向于找到一组稀疏参数, L2倾向于找到值比较小的参数.
2、 tol: float, default=1e-4 如果迭代过程中, 损失函数下降不到这个参数值, 就停止迭代.
3、 C: float, default=1.0 惩罚项的倒数, 越小惩罚力度越大.
4、 fit_intercept:bool, default=True 是否拟合截距
5、class_weight:dict or ‘balanced’, default=None 类别权重, 用于解决不平衡数据集.
6、solver: {‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’},default=’lbfgs’
优化器: 略
7、 max_iter: int, default=100 最大迭代次数.
8、 multi_class: {‘auto’, ‘ovr’, ‘multinomial’}, default=’auto’
多分类问题的解决方案.属性:
1、 coef_ : 变量中的系数。
2、intercept_ :截距。
3、n_iter_ :所有类的实际迭代次数。
第一步:导包
## 乳腺癌数据集
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
第二步:查看数据和拆分特征和标签
cancer = load_breast_cancer()
cancer.keys()#查看数据的构成
cancer.data.shape#查看数据形状
X = pd.DataFrame(cancer.data,columns=cancer.feature_names)
X
y = cancer.target
y
#划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=666)
第三步:建模
1、模型实例化
#分别构建三个模型
lrl1 = LogisticRegression(penalty="l1",solver="liblinear",random_state=666,max_iter= 10000)
lrl2 = LogisticRegression