怎么评价一个网站设计做的好坏,南昌 提供网站设计 公司,做婚礼策划的网站,网站建设实训教程一.逻辑回归基本介绍
逻辑回归也称作logistic回归#xff0c;是一种广义的线性回归分析模型#xff0c;主要是用来解决二分类问题#xff08;也可以解决多分类问题#xff09;。通过训练集来训练模型#xff0c;并在训练结束后对测试集进行分类。 通过激活函数是一种广义的线性回归分析模型主要是用来解决二分类问题也可以解决多分类问题。通过训练集来训练模型并在训练结束后对测试集进行分类。 通过激活函数也就是sigmoid函数可以将线性回归模型的值缩放到0,1之间公式和图像如下所示 通过这种方式我们就可以将结果靠近1的判定为一类靠近0的判定为另外一类了。 二.正则化基本介绍
正则化的意义避免过拟合。模型如果很复杂变量稍微变动就会引起模型的剧烈变动这会导致模型在训练集上表现非常好但是在测试集上会出现过拟合不具备泛化能力这不是我们想要的。因此我们选用正则化来避免过拟合这是因为正则项是非负的要使得损失最小必须让正则项趋近于0它降低了特征参数的权重使得模型更简单。
1、L1正则化 公式如下 标题 L1正则化可以让一部分权重变为零降维因此产生稀疏模型能够去除某些特征权重为0则等效于去除
2、L2正则化 公式如下 L2正则化使各个维度权重普遍变小减少了权重的固定比例使权重平滑。
三.超参数C的介绍 C浮点型为正的浮点数默认为1.0表示正则化强度的倒数。数值越小表示正则化越强。
接下来我们通过绘制图像来可视化超参数C的大小对模型准确率的影响从而选出最优的C
四.python实战
先导入必要的模块
from sklearn.linear_model import LogisticRegression as LR
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import numpy as np
导入乳腺癌数据集查看特征矩阵和标签值并将其划分为训练集和测试集
data load_breast_cancer()
x data.data
y data.target
x.shape # (569, 30)
y.shape # (569,)
np.unique(y) # array([0, 1]) 二分类问题
x_train, x_test, y_train, y_test train_test_split(x, y, test_size0.3, random_state420)
为了同时对比L1正则化和L2正则化的效果因此创建四个空列表
l1 [] # 创建l1正则化的训练集准确率的空列表
l2 [] # 创建l2正则化的训练集准确率的空列表
l1test [] # 创建l1正则化的测试集准确率的空列表
l2test [] # 创建l2正则化的测试集准确率的空列表
x_ np.linspace(0.05, 1, 19) # 从0.05到1之间取19个数
for i in x_:lrl1 LR(penaltyl1, solverliblinear, Ci, max_iter1000).fit(x_train, y_train)lrl2 LR(penaltyl2, solverliblinear, Ci, max_iter1000).fit(x_train, y_train)l1.append(accuracy_score(lrl1.predict(x_train), y_train)) # l1正则化的训练集准确率l1test.append(accuracy_score(lrl1.predict(x_test), y_test)) # l1正则化的测试集准确率l2.append(accuracy_score(lrl2.predict(x_train), y_train)) # l2正则化的训练集准确率l2test.append(accuracy_score(lrl2.predict(x_test), y_test)) # l2正则化的测试集准确率
graph [l1, l2, l1test, l2test]
color [green, black, lightgreen, gray]
label [L1, L2, L1test, L2test]
plt.figure(figsize(6, 6))
for i in range(len(graph)):plt.plot(x_, graph[i], color[i], labellabel[i])
plt.legend(loc4) # 图例位置.4表示右下角
plt.show()
结果如下所示 由图可知用训练集的测试结果显著优于用测试集的测试结果这说明模型在训练集上表现很好在测试集上表现欠佳这说明有轻微的过拟合。还可以发现当C逐渐增大时对模型的惩罚越来越小训练集上的表现越来越高但是测试集的表现L1正则化在C在0.5左右时就不再提升但是L2正则化在0.5之后还有提升且在0.62左右达到最高在0.9左右开始下降。虽然训练集表现在一路走高但是测试集上模型已经表现出了过拟合的倾向。因此我们会倾向选择0.62作为我们最优的C。