公司活动策划方案怎么做,seo优化网站建设哪家好,建设企业高端网站,微信公众平台小程序怎么制作一、什么是逻辑回归
1、逻辑回归#xff08;Logistic Regression#xff09;是机器学习中的一种分类模型#xff0c;逻辑回归是一种分类算法#xff0c;虽然名字中带有回归#xff0c;但是它与回归之间有一定的联系。由于算法的简单和高效#xff0c;在实际中应用非常广…一、什么是逻辑回归
1、逻辑回归Logistic Regression是机器学习中的一种分类模型逻辑回归是一种分类算法虽然名字中带有回归但是它与回归之间有一定的联系。由于算法的简单和高效在实际中应用非常广泛
2、叫回归但是它是一个分类算法
二、逻辑回归的应用场景
1、应用场景 广告点击率预测是否会被点击 是否为垃圾邮件 是否患病 金融诈骗是否为金融诈骗 虚假账号是否为虚假账号
均为二元问题
2、看到上面的例子我们可以发现其中的特点那就是都属于两个类别之间的判断。逻辑回归就是解决二分类问题的利器 会有一个正例和一个反例
三、逻辑回归的原理
1、逻辑回归的输入 线性回归的输出就是逻辑回归的输入
逻辑回归的输入就是一个线性回归的结果
2、怎么用输入来分类 要进行下一步处理带入到sigmoid函数当中我们把它叫做激活函数
3、sigmoid函数 可以理解为f(x)1/(1e^(-x))1加上e的负x次方分之1
sigmoid函数又称S型函数它是一种非线性函数可以将任意实数值映射到0-1之间的值通常用于分类问题。它的表达式为f(x)1/(1e^(-x))其中e为自然对数的底数。它的输出值均位于0~1之间当x趋向正无穷时f(x)趋向1当x趋向负无穷时f(x)趋向0 4、分析 将线性回归的输出结果代入到x的部分 输出结果[0, 1]区间中的一个概率值默认为0.5为阈值 逻辑回归最终的分类是通过属于某个类别的概率值来判断是否属于某个类别并且这个类别默认标记为1正例另外的一个类别会标记为0反例。方便损失计算
5、假设函数/线性模型 1/(1 e^(-(w1x1 w2x2 w3x3 ... wnxn b))) 如何得出权重和偏置使得这个模型可以准确的进行分类预测呢
6、损失函数真实值和预测值之间的差距 我们可以用求线性回归的模型参数的方法来构建一个损失函数
线性回归的损失函数(y_predict - y_true)平方和/总数它是一个值 而逻辑回归的真实值和预测值是否属于某个类别 所以就不能用均方误差和最小二乘法来构建 要使用对数似然损失
7、优化损失正规方程和梯度下降 用一种优化方法将损失函数取得最小值所对应的权重值就是我们求的模型参数
四、对数似然损失
1、公式 逻辑回归的损失称之为对数似然损失
1它是一个分段函数 2如果y1真实值是1属于这个类别损失就是 -log(y的预测值) 3如果y0真实值是0不属于这个类别损失就是 -log(1-y的预测值)
2、怎么理解单个的式子呢这个要根据log的函数图像来理解 当y1时横坐标是y的预测值
前提真实值是1如果预测值越接近于1则损失越接近0。如果预测值越接近于0则损失越大
当y0时横坐标是y的预测值
前提真实值是0如果预测值越接近1则损失越大
3、综合完整损失函数
损失函数-(y真实*logy预测(1-y真实)*log(1-y预测))求和
是线性回归的输出经过sigmoid函数映射之后的一个概率值
4、计算样例
五、优化损失
同样使用梯度下降优化算法去减少损失函数的值。这样去更新逻辑回归前面对应算法的权重参数提升原本属于1类别的概率降低原本是0类别的概率
六、逻辑回归API
1、sklearn.linear_model.LogisticRegression(solverliblinear, penaltyl2, C1.0) solver优化求解方式默认开源的liblinear库实现内部使用了坐标轴下降法来迭代优化损失函数 auto根据数据集自动选择随机平均梯度下降 penalty正则化的种类 C正则化力度
2、LogisticRegression方法相当于SGDClassifier(losslog, penalty ) SGDClassifier是一个分类器 SGDClassifier实现了一个普通的随机梯度下降学习也支持平均随机梯度下降法ASGD可以通过设置averageTrue 而使用LogisticRegression它的优化器已经可以使用SAG
七、案例癌症分类预测-良 / 恶性乳腺癌肿瘤预测
1、数据集 数据 https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data 数据的描述 https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.names
2、数据的描述 # Attribute Domain-- -----------------------------------------1. Sample code number id number2. Clump Thickness 1 - 103. Uniformity of Cell Size 1 - 104. Uniformity of Cell Shape 1 - 105. Marginal Adhesion 1 - 106. Single Epithelial Cell Size 1 - 107. Bare Nuclei 1 - 108. Bland Chromatin 1 - 109. Normal Nucleoli 1 - 1010. Mitoses 1 - 1011. Class: (2 for benign, 4 for malignant)
第一列样本的编号 第二到十列特征 第十一列分类2代表良性4代表恶性
3、流程分析 1获取数据 读取的时候加上names 2数据处理 处理缺失值 3数据集划分 4特征工程 无量纲化处理—标准化 5逻辑回归预估器 6模型评估
4、代码
import pandas as pd
import numpy as np# 1、读取数据
column_name [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]
data pd.read_csv(breast-cancer-wisconsin/breast-cancer-wisconsin.data, namescolumn_name)data# 2、缺失值处理
# 1?替换为np.nan
data data.replace(to_replace?, valuenp.nan)
# 2删除缺失样本
data.dropna(inplaceTrue)data# 不存在缺失值
data.isnull().any()# 3、划分数据集
from sklearn.model_selection import train_test_split# 筛选特征值和目标值
x data.iloc[:, 1:-1] # 行都要列从1到-1
y data[Class]x.head()y.head()x_train, x_test, y_train, y_test train_test_split(x, y)# 4、标准化
from sklearn.preprocessing import StandardScalertransfer StandardScaler()
x_train transfer.fit_transform(x_train)
x_test transfer.transform(x_test)x_trainfrom sklearn.linear_model import LogisticRegression# 5、预估器流程
estimator LogisticRegression()
estimator.fit(x_train, y_train)# 逻辑回归的模型参数回归系数和偏置
# 有几个特征就有几个回归系数
estimator.coef_estimator.intercept_# 6、模型评估
# 方法1直接比对真实值和预测值
y_predict estimator.predict(x_test)
print(y_predict\n, y_predict)
print(直接比对真实值和预测值\n, y_test y_predict)
# 方法2计算准确率
score estimator.score(x_test, y_test)
print(准确率为\n, score)5、运行结果