一、求解模型方法线性模型介绍两种解析法由于在模型中特征与标签已知所以对于xy函数来说参数才是要求解的变量参数变量由损失函数引入故求解一个参数的最优值变成了求解损失函数最小值1.解析法解析法适用于特征较少的情况过多的特征直接解析法运算较为复杂通过最小二乘法寻得一组参数使得模型的预测值与真实值最小损失函数适用均方误差损失函数因为可导性为一条光滑的曲线有最小值2.梯度下降法1梯度下降法原理解释梯度下降法适用于大部分情况无论特征多少是目前求解模型参数最常见的方法通过指定一组随机的参数开始进行梯度下降梯度下降的公式可以理解成新原参数 原参数 - L梯度每一次进行一次运算称之为一次迭代因为梯度的方向为函数上升快的方向所以公式中采用减号来表示梯度下降最快的方式L为学习率L设置过大容易造成不收敛的情况所以L应适当调整梯度为当前原参数带入损失函数的偏导数因为每一次迭代参数都会变化所以每一次带入都不一样梯度下降法找到的解不一定为全局最优解极易为局部最优解后续在深度学习中讲解如避免找到局部最优解2梯度下降法的分类梯度下降法如果每次使用单个样本作为迭代数据容易产生震荡的情况所以会有下面的方法分类批量梯度下降每次迭代使用全部的数据进行迭代优点是稳定收敛但是计算开销太大随机下降法每次使用选一个随机的样本进行迭代优点速度快适合大规模数据但是容易震荡小批量梯度下降法每次选取一小批数据进行迭代32或者64个既有稳定性也平衡了计算开销二、逻辑回归模型1、逻辑回归模型介绍逻辑回归模型是一种常用于二分类或者多分类场景的模型多用于离散型的值1二分类模型通过回归模型计算出预测值将预测值带入sigmoid函数当中得出一个概率这个概率是为1的概率值反之为零的概率为1-为1的概率值根据得出的为1的概率与一个设定好的阈值进行比较通常为0.5如果为1的概率大于0.5则预测的值为1反之为0sigmoid函数为其中x为​​​​​​​也就是线性函数的输出结果import pandas as pd from sklearn.compose import ColumnTransformer from sklearn.model_selection import train_test_split from sklearn.multiclass import OneVsRestClassifier from sklearn.preprocessing import StandardScaler, OneHotEncoder # 标准化 独热编码 缩放器 from sklearn.linear_model import LogisticRegression # 1. 读取数据 dataset pd.read_csv(../data/heart_disease.csv) # 2. 数据清洗 dataset.dropna(inplaceTrue) print(dataset.shape) # 3. 划分标签和特征 x dataset.drop(是否患有心脏病, axis1) # 特征 y dataset[是否患有心脏病] # 标签 # 4. 划分训练集和测试集 train_x, test_x, train_y, test_y train_test_split(x, y, test_size0.3, random_state42) # 5. 特征工程(数值做标准化 类别:独热编码) numerical_features [年龄, 静息血压, 胆固醇, 最大心率, 运动后的ST下降, 主血管数量] # 类别型特征 categorical_features [胸痛类型, 静息心电图结果, 峰值ST段的斜率, 地中海贫血] # 二元特征 binary_features [性别, 空腹血糖, 运动性心绞痛] # 列转换器 column_transformer ColumnTransformer([ (num, StandardScaler(), numerical_features), (cate, OneHotEncoder(dropfirst), categorical_features), (bin, passthrough, binary_features) ]) train_x column_transformer.fit_transform(train_x) test_x column_transformer.transform(test_x) print(train_x.shape) print(test_x.shape) # 6. 定义模型: 逻辑回归模型 model LogisticRegression( C1.0, solverlbfgs, max_iter10000, ) # 7. 训练模型 model.fit(train_x, train_y) # 8.评估模型 print(model.score(test_x, test_y))2多分类模型多分类模型逻辑回归模型中会为每一个分类输出一个分数然后把这个分数交给softmax函数每个分类都会得到一个概率分布所有概率分布的和为1然后从所有分类中选择一个最大概率的对应的分类作为预测结果特点只需训练1个逻辑回归模型若有C个类别模型将输出C个分数每个分类会有一套单独的参数所有类别的概率相加为1import pandas as pd from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler import matplotlib.pyplot as plt import joblib # 1. 读取数据172.17.0.132 dataset pd.read_csv(../data/train.csv) # 显示图片 # plt.imshow(dataset.iloc[0, 1:].values.reshape(28, -1), cmapGrays_r) # plt.show() # 3. 划分标签和特征 # x dataset.drop(label, axis1) x dataset.iloc[:, 1:] y dataset.iloc[:, 0] print(x.shape, y.shape) # 3. 划分训练集和测试集 train_x, test_x, train_y, test_y train_test_split(x, y, test_size0.2, random_state42) # 4. 特征工程: 归一化 scaler MinMaxScaler() train_x scaler.fit_transform(train_x) test_x scaler.transform(test_x) # 5. 定义模型: 逻辑回归模型 #model LogisticRegression(max_iter10000) # 6. 训练模型 #model.fit(train_x, train_y) # 保存模型 #joblib.dump(model, digital.model) # 加载模型 model joblib.load(digital.model) # 7. 评估模型(分数: 准确率) print(model.score(test_x, test_y)) # 8. 预测 pred_y model.predict(test_x[20].reshape(1, -1)) print(model.predict_proba(test_x[20].reshape(1, -1))) print(pred_y) plt.imshow(test_x[20].reshape(28, -1), cmapGrays_r) plt.show()3.逻辑回归的损失函数1对于二分类通常使用对数损失也称之为二元交叉熵损失公式的推导使用最大似然估计法进行推导没有解析解通常使用梯度下降法来进行来求损失函数的极小值2对于多分类通常使用其中为示性函数当时值为1反之值为0