2026/3/31 0:01:31
网站建设
项目流程
深圳最好用的网站设计,重庆企业网站开发方案,wordpress的语言,网站后台登陆验证码不对逻辑回归简介
学习目标#xff1a;
1.知道逻辑回归的应用场景
2.复习逻辑回归应用到的数学知识
【了解】应用场景逻辑回归是解决二分类问题的利器
【熟悉】数学知识
【知道】sigmoid函数【理解】概率【理解】极大似然估计
核心思想#xff1a;
设模型中含有待估参数w#xf…逻辑回归简介学习目标1.知道逻辑回归的应用场景2.复习逻辑回归应用到的数学知识【了解】应用场景逻辑回归是解决二分类问题的利器【熟悉】数学知识【知道】sigmoid函数【理解】概率【理解】极大似然估计核心思想设模型中含有待估参数w可以取很多值。已经知道了样本观测值从w的一切可能值中选出一个使该观察值出现的概率为最大的值作为w参数的估计值这就是极大似然估计。顾名思义就是看上去那个是最大可能的意思举个例子假设有一枚不均匀的硬币出现正面的概率和反面的概率是不同的。假定出现正面的概率为 抛了6次得到如下现象 D {正面反面反面正面正面正面}。每次投掷事件都是相互独立的。 则根据产生的现象D来估计参数是多少?P(D|) P {正面反面反面正面正面正面} P(正面|) P(正面|) P(正面|) P(正面|) P(正面|) P(正面|) *(1-)*(1-)** 4(1 − )问题转化为:求此函数的极大值时估计为多少【知道】对数函数逻辑回归原理学习目标1.理解逻辑回归算法的原理2.知道逻辑回归的损失函数【理解】原理逻辑回归概念 Logistic Regression• 一种分类模型把线性回归的输出作为逻辑回归的输入。• 输出是(0, 1)之间的值• 基本思想利用线性模型 f(x) wx b 根据特征的重要性计算出一个值再使用 sigmoid 函数将 f(x) 的输出值映射为概率值设置阈值(eg:0.5)输出概率值大于 0.5则将未知样本输出为 1 类否则输出为 0 类3.逻辑回归的假设函数h(w) sigmoid(wx b )线性回归的输出作为逻辑回归的输入在逻辑回归中当预测结果不对的时候我们该怎么衡量其损失呢我们来看下图(下图中设置阈值为0.6)那么如何去衡量逻辑回归的预测结果与真实结果的差异【知道】损失函数逻辑回归API学习目标1.知道逻辑回归的API2.动手实现癌症分类案例【知道】API介绍sklearn.linear_model.LogisticRegression(solverliblinear,penalty‘l2’,C1.0)solver损失函数优化方法:训练速度:liblinear 对小数据集场景训练速度更快sag 和 saga 对大数据集更快一些。 2 正则化:newton-cg、lbfgs、sag、saga 支持 L2 正则化或者没有正则化2liblinear 和 saga 支持 L1 正则化penalty:正则化的种类l1 或者 l2C:正则化力度默认将类别数量少的当做正例【实践】癌症分类案例数据介绍1699条样本共11列数据第一列用语检索的id后9列分别是与肿瘤相关的医学特征 最后一列表示肿瘤类型的数值。2包含16个缺失值用”?”标出。32表示良性4表示恶性数据描述1699条样本共11列数据第一列用语检索的id后9列分别是与肿瘤相关的医学特征最后一列表示肿瘤类型的数值。2包含16个缺失值用”?”标出。案例分析1.获取数据 2.基本数据处理 2.1 缺失值处理 2.2 确定特征值,目标值 2.3 分割数据 3.特征工程(标准化) 4.机器学习(逻辑回归) 5.模型评估代码实现importpandasaspdimportnumpyasnpfromsklearn.linear_modelimportLogisticRegressionfromsklearn.metricsimportaccuracy_scorefromsklearn.model_selectionimporttrain_test_splitfromsklearn.preprocessingimportStandardScalerdefdm01_LogisticRegression():# 1. 获取数据.datapd.read_csv(data/breast-cancer-wisconsin.csv)data.info()# 2. 数据预处理.# data data.replace(to_replace?, valuenp.NAN)datadata.replace(?,np.NaN)datadata.dropna()data.info()# 3. 确定特征值和目标值.xdata.iloc[:,1:-1]ydata.Classprint(fx.head():{x.head()})print(fy.head():{y.head()})# 3. 分割数据.x_train,x_test,y_train,y_testtrain_test_split(x,y,test_size0.2,random_state21)# 4. 特征处理.transferStandardScaler()x_traintransfer.fit_transform(x_train)x_testtransfer.transform(x_test)# 5. 模型训练.estimatorLogisticRegression()estimator.fit(x_train,y_train)# 6. 模型预测y_predictestimator.predict(x_test)print(f预测值:{y_predict})# 7. 模型评估print(f准确率:{estimator.score(x_test,y_test)})print(f准确率:{accuracy_score(y_test,y_predict)})if__name____main__:dm01_LogisticRegression()分类评估方法学习目标1.理解混淆矩阵的构建方法2.掌握精确率召回率和F1score的计算方法3.知道ROC曲线和AUC指标【理解】混淆矩阵混淆矩阵作用在测试集样本集中真实值是正例的样本中被分类为正例的样本数量有多少这部分样本叫做真正例TPTrue Positive真实值是正例的样本中被分类为假例的样本数量有多少这部分样本叫做伪反例FNFalse Negative真实值是假例的样本中被分类为正例的样本数量有多少这部分样本叫做伪正例FPFalse Positive真实值是假例的样本中被分类为假例的样本数量有多少这部分样本叫做真反例TNTrue NegativeTrue Positive 表示样本真实的类别Positive 表示样本被预测为的类别例子样本集中有 6 个恶性肿瘤样本4 个良性肿瘤样本我们假设恶性肿瘤为正例则模型 A预测对了 3 个恶性肿瘤样本4 个良性肿瘤样本真正例 TP 为3伪反例 FN 为3伪正例 FP 为0真反例 TN4模型 B预测对了 6 个恶性肿瘤样本1个良性肿瘤样本真正例 TP 为6伪反例 FN 为0伪正例 FP 为3真反例 TN1我们会发现TPFNFPTN 总样本数量fromsklearn.metricsimportconfusion_matrix,precision_score,recall_score,f1_scoreimportpandasaspddefdm01_混淆矩阵四个指标():# 1. 定义样本集, 6个恶性肿瘤样本, 4个良性肿瘤样本y_true[恶性,恶性,恶性,恶性,恶性,恶性,良性,良性,良性,良性]# 2. 定义标签labels[恶性,良性]# 3. 模型A 预测对了 3个恶性, 4个良性.y_pred_A[恶性,恶性,恶性,良性,良性,良性,良性,良性,良性,良性]resultconfusion_matrix(y_true,y_pred_A)print(pd.DataFrame(result,indexlabels,columnslabels))# 4. 模型B 预测对了6个恶性肿瘤样本, 1个良性肿瘤样本.y_pred_B[恶性,恶性,恶性,恶性,恶性,恶性,恶性,恶性,恶性,良性]resultconfusion_matrix(y_true,y_pred_B)print(pd.DataFrame(result,indexlabels,columnslabels))# 5. 计算精确率 (precision)print(f模型A精确率:{precision_score(y_true,y_pred_A,pos_label恶性)})print(f模型B精确率:{precision_score(y_true,y_pred_B,pos_label恶性)})# 6. 计算召回率 (recall)print(f模型A召回率:{recall_score(y_true,y_pred_A,pos_label恶性)})print(f模型B召回率:{recall_score(y_true,y_pred_B,pos_label恶性)})# 7. 计算F1值print(f模型A F1值:{f1_score(y_true,y_pred_A,pos_label恶性)})print(f模型B F1值:{f1_score(y_true,y_pred_B,pos_label恶性)})if__name____main__:dm01_混淆矩阵四个指标()【掌握】Precision精确率精确率也叫做查准率指的是对正例样本的预测准确率。比如我们把恶性肿瘤当做正例样本则我们就需要知道模型对恶性肿瘤的预测准确率。例子样本集中有 6 个恶性肿瘤样本4 个良性肿瘤样本我们假设恶性肿瘤为正例则模型 A预测对了 3 个恶性肿瘤样本4 个良性肿瘤样本真正例 TP 为3伪反例 FN 为3假正例 FP 为0真反例 TN4精准率3/(30) 100%模型 B预测对了 6 个恶性肿瘤样本1个良性肿瘤样本真正例 TP 为6伪反例 FN 为0假正例 FP 为3真反例 TN1精准率6/(63) 67%【掌握】Recall召回率召回率也叫做查全率指的是预测为真正例样本占所有真实正例样本的比重。例如我们把恶性肿瘤当做正例样本则我们想知道模型是否能把所有的恶性肿瘤患者都预测出来。例子样本集中有 6 个恶性肿瘤样本4 个良性肿瘤样本我们假设恶性肿瘤为正例则模型 A预测对了 3 个恶性肿瘤样本4 个良性肿瘤样本真正例 TP 为3伪反例 FN 为3假正例 FP 为0真反例 TN4精准率3/(30) 100%召回率3/(33)50%模型 B预测对了 6 个恶性肿瘤样本1个良性肿瘤样本真正例 TP 为6伪反例 FN 为0假正例 FP 为3真反例 TN1精准率6/(63) 67%召回率6/(60) 100%【掌握】F1-score如果我们对模型的精度、召回率都有要求希望知道模型在这两个评估方向的综合预测能力如何则可以使用 F1-score 指标。样本集中有 6 个恶性肿瘤样本4 个良性肿瘤样本我们假设恶性肿瘤为正例则模型 A预测对了 3 个恶性肿瘤样本4 个良性肿瘤样本真正例 TP 为3伪反例 FN 为3假正例 FP 为0真反例 TN4精准率3/(30) 100%召回率3/(33)50%F1-score(2*3)/(2*330)67%模型 B预测对了 6 个恶性肿瘤样本1个良性肿瘤样本真正例 TP 为6伪反例 FN 为0假正例 FP 为3真反例 TN1精准率6/(63) 67%召回率6/(60) 100%F1-score(2*6)/(2*603)80%【知道】ROC曲线和AUC指标ROC 曲线ROC 曲线我们分别考虑正负样本的情况正样本中被预测为正样本的概率即TPR True Positive Rate负样本中被预测为正样本的概率即FPR False Positive RateROC 曲线图像中4 个特殊点的含义(0, 0) 表示所有的正样本都预测为错误所有的负样本都预测正确(1, 0) 表示所有的正样本都预测错误所有的负样本都预测错误(1, 1) 表示所有的正样本都预测正确所有的负样本都预测错误(0, 1) 表示所有的正样本都预测正确所有的负样本都预测正确绘制 ROC 曲线假设在网页某个位置有一个广告图片或者文字该广告共被展示了 6 次有 2 次被浏览者点击了。每次点击的概率如下样本是否被点击预测点击概率110.9200.7310.8400.6500.5600.4根据预测点击概率排序之后样本是否被点击预测点击概率110.9310.8200.7400.6500.5600.4绘制 ROC 曲线阈值0.9原本为正例的 1、3 号的样本中 3 号样本被分类错误则 TPR 1/2 0.5原本为负例的 2、4、5、6 号样本没有一个被分为正例则 FPR 0阈值0.8原本为正例的 1、3 号样本被分类正确则 TPR 2/2 1原本为负例的 2、4、5、6 号样本没有一个被分为正例则 FPR 0阈值0.7原本为正例的 1、3 号样本被分类正确则 TPR 2/2 1原本为负类的 2、4、5、6 号样本中 2 号样本被分类错误则 FPR 1/4 0.25阈值0.6原本为正例的 1、3 号样本被分类正确则 TPR 2/2 1原本为负类的 2、4、5、6 号样本中 2、4 号样本被分类错误则 FPR 2/4 0.5阈值0.5原本为正例的 1、3 号样本被分类正确则 TPR 2/2 1原本为负类的 2、4、5、6 号样本中 2、4、5 号样本被分类错误则 FPR 3/4 0.75阈值 0.4原本为正例的 1、3 号样本被分类正确则 TPR 2/2 1原本为负类的 2、4、5、6 号样本全部被分类错误则 FPR 4/4 1(0, 0.5)、(0, 1)、(0.25, 1)、(0.5, 1)、(0.75, 1)、(1, 1)由 TPR 和 FPR 构成的 ROC 图像为AUC 值我们发现图像越靠近 (0,1) 点则模型对正负样本的辨别能力就越强我们发现图像越靠近 (0, 1) 点则 ROC 曲线下面的面积就会越大AUC 是 ROC 曲线下面的面积该值越大则模型的辨别能力就越强AUC 范围在 [0, 1] 之间当 AUC 1 时该模型被认为是完美的分类器但是几乎不存在完美分类器AUC 值主要评估模型对正例样本、负例样本的辨别能力.分类评估报告apisklearn.metrics.classification_report(y_true,y_pred,labels[],target_namesNone) y_true真实目标值 y_pred估计器预测目标值 labels:指定类别对应的数字 target_names目标类别名称 return每个类别精确率与召回率 AUC计算APIfrom sklearn.metrics import roc_auc_score sklearn.metrics.roc_auc_score(y_true, y_score) 计算ROC曲线面积即AUC值 y_true每个样本的真实类别必须为0(反例),1(正例)标记 y_score预测得分可以是正例的估计概率、置信值或者分类器方法的返回值【实践】电信客户流失预测学习目标1.了解案例的背景信息2.知道案例的处理流程3.动手实现电信客户流失案例的代码数据集介绍流失用户指的使用过产品因为某些原因不再使用该产品。随着产品的更新迭代都会存在一定的流失情况这时正常现象。流失用户的比例和变化趋势能够反映该产品当前是否存在问题以及未来的发展趋势。当用户群体庞大时有限的人力和精力不能为每个用户都投入大量的时间。如果公司可以预测哪些用户可能提前流失这样就能将主要精力聚焦于这些用户实施有效的用户挽留策略提高用户粘性。本项目旨在通过分析特征属性确定用户流失的原因以及哪些因素可能导致用户流失。建立预测模型来判断用户是否流失并提出用户流失预警策略。具体数据说明如下数据集中总计7043条数据21个特征字段最终分类特征为Churn用户是否流失具体内容如下所示customerID用户IDgender性别SeniorCitizen是否是老人Partner是否有伴侣Dependents是否有需要抚养的孩子tenure任职PhoneService是否办理电话服务MultipleLines是否开通了多条线路InternetService是否开通网络服务和开通的服务类型光纤、电话拨号TechSupport是否办理技术支持服务OnlineBackup是否办理在线备份服务OnlineSecurity是否办理在线安全服务DeviceProtection是否办理设备保护服务StreamingTV是否办理电视服务StreamingMovies是否办理电影服务Contract签订合约的时长PaperlessBilling是否申请了无纸化账单PaymentMethod付款方式电子支票、邮寄支票、银行自动转账、信用卡自动转账MonthlyCharges月消费TotalCharges总消费Churn用户是否流失处理流程1、数据基本处理查看数据的基本信息 对类别数据数据进行one-hot处理 查看标签分布情况2、特征筛选 分析哪些特征对标签值影响大 初步筛选出对标签影响比较大的特征形成x、y3、模型训练 模型训练 交叉验证网格搜索等4、模型评估 精确率 Roc_AUC指标计算案例实现importnumpyasnpimportpandasaspdimportseabornassnsimportmatplotlib.pyplotaspltfromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLogisticRegressionfromsklearn.metricsimportaccuracy_score,roc_auc_score# 1. 定义函数, 表示: 数据基本处理defdm01_数据基本处理():# 1. 读取数据, 查看数据的基本信息.churn_pdpd.read_csv(data/churn.csv)# churn_pd.info()# print(fchurn_pd.describe(): {churn_pd.describe()})# print(fchurn_pd: {churn_pd})# 2. 处理类别型的数据, 类别型数据做 one-hot编码(热编码).churn_pdpd.get_dummies(churn_pd)churn_pd.info()# print(fchurn_pd: {churn_pd})# 3. 去除列 Churn_No, gender_Malechurn_pd.drop([Churn_No,gender_Male],axis1,inplaceTrue)# 按列删除print(fchurn_pd:{churn_pd})# 4. 列标签重命名, 打印列名churn_pd.rename(columns{Churn_Yes:flag},inplaceTrue)print(f列名:{churn_pd.columns})# 5. 查看标签的分布情况 0.26用户流失value_countschurn_pd.flag.value_counts()print(value_counts)# 2. 定义函数, 表示: 特征筛选defdm02_特征筛选():# 1. 读取数据churn_pdpd.read_csv(data/churn.csv)# 2. 处理类别型的数据, 类别型数据做 one-hot编码(热编码).churn_pdpd.get_dummies(churn_pd)# 3. 去除列 Churn_No, gender_Malechurn_pd.drop([Churn_No,gender_Male],axis1,inplaceTrue)# 4. 列标签重命名churn_pd.rename(columns{Churn_Yes:flag},inplaceTrue)# 5. 查看标签的分布情况value_countschurn_pd.flag.value_counts()print(value_counts)# 6. 查看Contract_Month 是否预签约流失情况sns.countplot(datachurn_pd,xContract_Month,hueflag)plt.show()# 3. 定义函数, 表示: 模型训练 和 评测defdm03_模型训练和评测():# 1. 读取数据churn_pdpd.read_csv(data/churn.csv)# 2. 数据预处理# 2.1 处理类别型的数据, 类别型数据做 one-hot编码(热编码).churn_pdpd.get_dummies(churn_pd)# 2.2 去除列 Churn_No, gender_Malechurn_pd.drop([Churn_No,gender_Male],axis1,inplaceTrue)# 2.3 列标签重命名churn_pd.rename(columns{Churn_Yes:flag},inplaceTrue)# 3. 特征处理.# 3.1 提取特征和标签xchurn_pd[[Contract_Month,internet_other,PaymentElectronic]]ychurn_pd[flag]# 3.2 训练集和测试集的分割x_train,x_test,y_train,y_testtrain_test_split(x,y,test_size0.3,random_state21)# 4. 模型训练.estimatorLogisticRegression()estimator.fit(x_train,y_train)# 5. 模型预测y_predictestimator.predict(x_test)print(f预测结果:{y_predict})# 6. 模型评估print(f准确率:{accuracy_score(y_test,y_predict)})print(f准确率:{estimator.score(x_test,y_test)})# 计算AUC值.print(fAUC值:{roc_auc_score(y_test,y_predict)})if__name____main__:# dm01_数据基本处理()# dm02_特征筛选()dm03_模型训练和评测()作业使用思维导图总结逻辑回归的内容理解分类评估方法并进行详细的描述3.动手实现癌症分类和电信用户流失案例(数据处理特征工程CV。。。。)