目录一、概念二、数学知识1.sigmoid 函数2.概率1 边际概率 ——2 联合概率 ——3 条件概率 ——3、逻辑回归原理 —— 交叉熵损失函数例子 损失函数手工计算逻辑函数原理 —— 似然函数1.伯努利分布2.伯努利分布函数3.交叉熵和似然函数关系举例总结三、逻辑回归模型实例需求1.获取数据2.数据处理 缺失值3.特征工程4.模型训练5.模型预测6.模型评估一、概念解决的是分类问题应用场景预测疾病阴性、阳性、银行信任贷款放贷、不放贷、预测广告点击率点击、不点击等等。逻辑回归核心思想解决二分类的利器比如学生成绩输入成绩、考试分数 线性函数 把线性回归的输出作为sigmoid函数的输入 P 设置概率比如P 0.5 通过 P 0.5 不通过将线性回归的输出映射到0,1区间不一定是0.5把线性回归的输出当做逻辑回归的输入然后讲数据映射到区间上做分类操作二、数学知识1.sigmoid 函数作用数学性质单调递增函数拐点在x0 时 y 0.5斜率最大当 f(x) 0.5 时预测结果维1当f(x) 0.5 时预测结果为0导函数f(x). 概率值线性回归的输出逻辑回归的假设函数例子逻辑回归预测过程阈值为0.6阈值0.6预测结果不好调整特征。2.概率1 边际概率 ——描述的是单一事件发生的可能性记作PA 或者 PB事件A事件B发生的概率2 联合概率 ——描述的是两个或多个独立事件同时发生的概率记作PA∩B或者PABA交B的概率 A和B的联合概率3 条件概率 ——描述的是在事件A已发生的条件下事件B发生的概率记作PB | A在事件A发生的情况下事件B发生概率场景1联合概率事件A周一早上堵车PA 0.7事件B周二早上堵车PB 0.7PA∩B 0.7 * 0.7 0.49 概率场景2条件概率事件A周一早上堵车PA 0.7事件B周一中午堵车切已知PB | A 0.3 即早上堵车时中午堵车概率0.3联合概率 PA∩B PA * PB | A 0.7 * 0.3 0.21公式P B | A P A∩B/ PA———————————————————————————————————————————3、逻辑回归原理 —— 交叉熵损失函数二分类 0,1损失函数LossL所有的样本的损失值越小越好yi : 第i个真实值标签m样本总数pi第i个样本的预测值yi: 第i个真实标签 1时如果预测概率pi接近于1log10 损失接近于0 很好如果预测概率pi接近于0log0趋近于负无穷损失非常大yi: 第i个真实标签 0时如果预测概率pi接近于0log10 损失接近于0 很好如果预测概率pi接近于1log0趋近于负无穷损失非常大例子 损失函数手工计算逻辑函数原理 —— 似然函数1.伯努利分布描述单次二分类实验结果的离散概率分布其随机变量X只有两种取值X 1表示“成功”概率为pX 0 表示“失败”概率为1-p2.伯努利分布函数假设有样本[(x1,y1),(x2,y2)....,(xn,yn)],n个样本都预测正确的概率就是伯努利分布的似然函数1.pi 表示每个样本被分类正确时候的概率2. yi 表示每个样本的真实类别0 或 1总体是联合概率每一项是条件概率。问题转化为让联合概率事件最大时估计w、b的权重参数这就是极大似然估计Maximum Likelihood Estimation核心思想在已知观测数据的情况下选择使用这些数据出现概率最大的参数值。3.交叉熵和似然函数关系伯努利分布的似然函数是逻辑回归交叉熵损失的来源对其取负对数直接得到交叉熵损失1.把最大化问题将其变为最小化问题最大化似然函数 - 最小化交叉熵损失2.把连乘问题变为连加问题举例假设数据y [1,0],模型预测p [0.8,0.3]1.伯努利似然2.交叉熵损失总结逻辑回归解决分类问题把线性回归输出作为逻辑回归的输入逻辑回归的优化操作1.极大化似然函数2.最小化交叉熵损失三、逻辑回归模型实例需求癌症分类预测对699条样本共11列数据1第一列用于检索的id后9列 肿瘤医学特征最后一列肿瘤类型的数值2包含16个缺失值用“”标出32表示良型4表示恶性from sklearn.linear_model import LogisticRegression #逻辑回归模型 from sklearn.model_selection import train_test_split #数据集切分 from sklearn.preprocessing import StandardScaler #标准化 from sklearn.metrics import accuracy_score #模型评估 import pandas as pd import numpy as np1.获取数据data pd.read_csv(../机器学习/breast-cancer-wisconsin.csv)2.数据处理 缺失值# 2.1用np.NaN data data.replace(?,np.nan) # data.info() # 2.2删缺失值 # 参1: axis0 (按行删) 参2是否影响原数据 data.dropna(axis0,inplaceTrue)3.特征工程# 3.特征工程 # 3.1 获取特征列 和 目标值 # iloc [行列] 切片 # 第一列 到 倒数第二列 x_data data.iloc[:,1:-1] #所有行第1 ~ -1列 # 3.2取标签 y_target data.iloc[:,-1] #获取最后一列 # 3.3 已有 x 特征集y 标签级 # 随机种子 18 优于其他 x_train, x_test, y_train, y_test train_test_split( x_data, y_target, test_size 0.2, random_state 18 ) # 3.4 数据集相差不大可以不用做标准化但为了让步骤完整。坐一下 transfer StandardScaler() x_train transfer.fit_transform(x_train) x_test transfer.transform(x_test)4.模型训练# 4 模型训练 model LogisticRegression() model.fit(x_train, y_train)5.模型预测# 5.模型预测 x_test 预测集特征 y_predict model.predict(x_test) print(f预测值{y_predict})6.模型评估# 6.模型评估 # model.score 模型自带 print(f准确率{model.score(x_test, y_test)}) print(f准确率{accuracy_score(y_test, y_predict)})