东莞+网站建设+定制水,wordpress支持移动,深圳搭建网站公司,网站系统模版纯手打#xff0c;代码整理中#xff0c;持续更新中^-^序号延用总结七15、线性模型 逻辑回归15.1 定义线性模型用于分类的核心思想非常直观#xff1a;试图找到一个线性决策边界#xff08;在特征空间中是一条直线、一个平面或一个超平面#xff09;#xff0c;将不同类别…纯手打代码整理中持续更新中^-^序号延用总结七15、线性模型 逻辑回归15.1 定义线性模型用于分类的核心思想非常直观试图找到一个线性决策边界在特征空间中是一条直线、一个平面或一个超平面将不同类别的数据点分开。对于二分类问题模型学习的是x[0] 到 x[p] 表示样本的 p 个特征。w[0] 到 w[p] 是模型学习到的权重系数Coefficients体现了每个特征对决策的重要性。b 是截距Intercept也叫偏置。如果这个线性函数的结果大于 0样本被预测为类别 A否则被预测为类别 B。这个决策边界就是函数y0 所代表的那个超平面。那么如何将线性输出转换为概率虽然决策是线性的但我们可以通过一个链接函数如 Sigmoid 函数将线性输出映射到 [0, 1] 区间解释为样本属于某个类别的概率。这就是逻辑回归的做法。先直接看一段代码然后再详细讲下参数15.2 代码示例主要流程就是 标准化 正确的数据划分 全面评估from sklearn.datasets import load_iris from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, classification_report from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler # 1, 加载数据 iris load_iris() X iris.data # 特征矩阵150个样本4个特征萼长、萼宽、瓣长、瓣宽 y iris.target # 特征值 目标向量3类鸢尾花012 # 2, 数据预处理 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2) # 划分训练集和测试集 scaler StandardScaler() # 数据标准化消除不同特征量纲的影响 # 这里fit_transform是在训练集上“学习”并“转换” # 然後得到scaler.mean_ 训练集的均值和scaler.scale_ 标准差 X_train_scaled scaler.fit_transform(X_train) # fit计算生成模型transform通过模型转换数据 X_test_scaled scaler.transform(X_test) # 使用训练集的参数转换测试集 # 3, 创建和训练 LogisticRegression 模型 model LogisticRegression() model.fit(X_train_scaled, y_train) # 使用训练数据拟合训练模型 # 4, 进行预测并评估模型 y_pred model.predict(X_test_scaled) # 在测试集上进行预测 print(模型预测值, y_pred) print(正确值 , y_test) accuracy accuracy_score(y_test, y_pred) # 计算准确率 print(f测试集准确率{accuracy:.2f}) print(分类报告\n, classification_report(y_test, y_pred, target_namesiris.target_names))结果输出15.3 详细参数上面代码中LogisticRegression 是 scikit-learn 中用于执行逻辑回归的分类器适用于二分类和多分类任务。LogisticRegression(penaltyl2, *, dualFalse, tol0.0001, C1.0, fit_interceptTrue, intercept_scaling1, class_weightNone, random_stateNone, solverlbfgs, max_iter100, multi_classauto, verbose0, warm_startFalse, n_jobsNone, l1_ratioNone)正则化参数penalty (默认l2)正则化类型用于防止过拟合可选值: l1, l2, elasticnet, nonel1 (Lasso): 产生稀疏模型可用于特征选择l2 (Ridge): 默认值使所有特征系数变小但不为零elasticnet: L1和L2的混合none: 无正则化C (默认1.0)正则化强度的倒数必须是正浮点数值越小正则化越强l1_ratio (默认None)仅当 penaltyelasticnet 时使用控制L1和L2正则化的混合比例(0到1之间)0表示纯L21表示纯L1求解器参数solver (默认lbfgs)优化算法可选值: newton-cg, lbfgs, liblinear, sag, saga不同求解器支持不同的正则化类型:liblinear: 支持L1和L2saga: 支持所有正则化类型其他: 主要支持L2或无正则化max_iter (默认100)求解器收敛的最大迭代次数对于大型数据集可能需要增加此值tol (默认1e-4)优化的容忍度/停止阈值当损失函数变化小于此值时停止迭代多分类参数multi_class (默认auto)多分类策略可选值: auto, ovr, multinomialovr (one-vs-rest): 为每个类别训练一个二分类器multinomial: 直接多分类使用softmax函数auto: 自动选择类别权重参数class_weight (默认None)处理类别不平衡可选值: None, balanced, 或字典 {class_label: weight}balanced: 自动调整权重与类别频率成反比其他重要参数random_state (默认None)随机数种子用于 reproducible results当solver为sag, saga或liblinear时使用fit_intercept (默认True)是否拟合截距项(偏置项)n_jobs (默认None)用于计算的CPU核心数-1表示使用所有可用的核心verbose (默认0)输出详细程度值越大输出信息越详细warm_start (默认False)是否使用前一次拟合的结果作为初始化15.4 分类的线性模型在sklearn.linear_model中最常用的分类线性模型是LogisticRegression逻辑回归原理虽然名字带“回归”但它是经典的分类算法。它使用 Sigmoid 函数将线性模型的输出转换为概率值0 到 1 之间。损失函数通常使用对数损失Log Loss或交叉熵损失Cross-Entropy Loss来优化模型参数。特点输出有概率意义可以知道分类的置信度。可解释性强权重系数的大小和正负代表了特征的影响方向和程度。可以通过 penalty 参数施加 L1 或 L2 正则化以防止过拟合。示例from sklearn.datasets import load_iris 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 # 加载数据 X, y load_iris(return_X_yTrue) X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42) # 标准化推荐尤其使用 L2 正则时 scaler StandardScaler() X_train_scaled scaler.fit_transform(X_train) X_test_scaled scaler.transform(X_test) # 创建并训练模型 model LogisticRegression( penaltyl2, # 正则化类型 C1.0, # 正则强度越小正则越强 solverlbfgs, # 优化器自动支持多分类 max_iter200, # 最大迭代次数 random_state42 ) model.fit(X_train_scaled, y_train) # 预测 y_pred model.predict(X_test_scaled) y_proba model.predict_proba(X_test_scaled) # 获取概率 print(准确率:, accuracy_score(y_test, y_pred)) print(预测概率前3个样本:\n, y_proba[:3])输出SGDClassifier随机梯度下降分类器原理这是一个通用的线性分类器它使用随机梯度下降Stochastic Gradient Descent来最小化不同的损失函数。灵活性通过设置 loss 参数它可以模拟其他线性模型losslog_loss等价于逻辑回归。losshinge等价于线性支持向量机SVM。lossperceptron等价于感知机。特点非常适合大规模数据集因为它是增量式学习的每次只用一个或一小批样本更新模型。效率高但需要仔细调参如学习率。示例from sklearn.linear_model import SGDClassifier # 注意SGD 对特征尺度敏感必须标准化 scaler StandardScaler() X_train_scaled scaler.fit_transform(X_train) X_test_scaled scaler.transform(X_test) # 创建 SGD 分类器设置 losslog_loss 等价于逻辑回归 sgd_model SGDClassifier( losslog_loss, # ← 关键指定为逻辑回归 penaltyl2, # 正则化 alpha1e-4, # 正则强度注意SGD 用 alpha不是 C learning_rateoptimal, max_iter1000, tol1e-3, random_state42 ) sgd_model.fit(X_train_scaled, y_train) # 预测 y_pred_sgd sgd_model.predict(X_test_scaled) y_proba_sgd sgd_model.predict_proba(X_test_scaled) print(SGD 准确率:, accuracy_score(y_test, y_pred_sgd))输出