南昌市网站建设_网站建设公司_外包开发_seo优化
2026/1/18 6:08:21 网站建设 项目流程

Day 83:【99天精通Python】机器学习进阶 - 分类问题与逻辑回归

前言

欢迎来到第83天!

在昨天的课程中,我们学习了回归 (Regression)问题,即预测一个连续的数值(如房价)。
今天,我们要学习机器学习的另一大类问题——分类 (Classification)

分类问题的目标是预测一个离散的类别,比如:

  • 判断一封邮件是"垃圾邮件"还是"非垃圾邮件"(二分类)。
  • 识别一张图片是"猫"、“狗"还是"鸟”(多分类)。

我们将从最基础的分类算法逻辑回归 (Logistic Regression)开始。虽然它名字里有"回归",但它是一个分类算法

本节内容:

  • 分类与回归的区别
  • 逻辑回归原理与 Sigmoid 函数
  • 数据集加载与可视化
  • 训练与评估 (准确率、混淆矩阵)
  • 实战练习:鸢尾花分类

一、逻辑回归原理

逻辑回归是如何做分类的?

  1. 它先像线性回归一样,计算一个得分:z = w*x + b
  2. 这个得分z是一个连续值,可以是负无穷到正无穷。
  3. 然后,它用一个Sigmoid 函数z压缩到 0-1 之间,得到一个概率值。
  4. 最后,设置一个阈值(如 0.5),大于 0.5 判为类别 1,小于 0.5 判为类别 0。

Sigmoid 函数
σ(z)=11+e−z \sigma(z) = \frac{1}{1 + e^{-z}}σ(z)=1+ez1

importnumpyasnpimportmatplotlib.pyplotaspltdefsigmoid(z):return1/(1+np.exp(-z))z=np.linspace(-10,10,100)plt.plot(z,sigmoid(z))plt.title("Sigmoid Function")plt.grid(True)# plt.show()

二、实战:鸢尾花分类 (Iris Dataset)

鸢尾花数据集是机器学习分类问题的"Hello World"。它包含 3 种鸢尾花,每种花有 4 个特征(花萼长/宽、花瓣长/宽)。

我们的任务是:根据花的特征,判断它属于哪一类。

2.1 加载数据

importpandasaspdfromsklearn.datasetsimportload_irisfromsklearn.model_selectionimporttrain_test_splitfromsklearn.linear_modelimportLogisticRegression# 1. 加载数据iris=load_iris()X=iris.data# 特征y=iris.target# 目标 (0, 1, 2)# 为了方便,我们只做二分类:判断是否是 "setosa" (类别0)# 将问题简化为:是 setosa (1) 还是不是 setosa (0)y_binary=(y==0).astype(int)# 2. 划分数据集X_train,X_test,y_train,y_test=train_test_split(X,y_binary,test_size=0.3,random_state=42)

2.2 训练模型

# 1. 创建模型# C 是正则化强度的倒数,C越小,正则化越强model=LogisticRegression(C=1.0)# 2. 训练model.fit(X_train,y_train)# 3. 预测y_pred=model.predict(X_test)print(f"预测结果:{y_pred}")print(f"真实结果:{y_test}")

三、模型评估 (Classification)

对于分类问题,我们不能用 MSE。最常用的指标是准确率 (Accuracy)

3.1 准确率

准确率 = (预测正确的样本数) / (总样本数)

fromsklearn.metricsimportaccuracy_score acc=accuracy_score(y_test,y_pred)print(f"准确率:{acc:.2f}")# 结果通常是 1.00,因为这个问题太简单了

3.2 混淆矩阵 (Confusion Matrix)

准确率高不一定代表模型好(比如预测地震,99.99% 的时间都是"不发生")。
混淆矩阵能更详细地展示模型犯了哪种错误。

预测为0预测为1
真实为0TN (真阴)FP (假阳)
真实为1FN (假阴)TP (真阳)
fromsklearn.metricsimportconfusion_matriximportseabornassns cm=confusion_matrix(y_test,y_pred)plt.figure(figsize=(6,4))sns.heatmap(cm,annot=True,fmt='d')plt.xlabel("Predicted")plt.ylabel("Actual")plt.title("Confusion Matrix")# plt.show()

3.3 分类报告 (Classification Report)

包含精确率 (Precision)召回率 (Recall)F1-score

  • 精确率:你预测为 1 的里面,有多少真的是 1?(别误报)
  • 召回率:所有真的 1 里面,你找出了多少?(别漏报)
fromsklearn.metricsimportclassification_reportprint(classification_report(y_test,y_pred,target_names=["Not Setosa","Setosa"]))

四、特征标准化 (Standardization)

在很多算法中(包括逻辑回归),如果特征的数值范围差别很大(如年龄 20-80 vs 收入 1万-100万),模型会学得不好。
我们需要把所有特征都缩放到同一个尺度

fromsklearn.preprocessingimportStandardScaler scaler=StandardScaler()# 在训练集上学习缩放规则X_train_scaled=scaler.fit_transform(X_train)# 在测试集上应用相同的规则 (不能 fit 测试集,防止数据泄露)X_test_scaled=scaler.transform(X_test)# 用缩放后的数据重新训练model.fit(X_train_scaled,y_train)# ...

五、小结

分类问题

逻辑回归

模型评估

数据预处理

Sigmoid 函数 (0-1概率)

LogisticRegression()

accuracy_score

confusion_matrix

classification_report

StandardScaler (标准化)

关键要点

  1. 逻辑回归是分类算法,不是回归算法。
  2. 分类问题的评估指标比回归更丰富(准确率、精确率、召回率)。
  3. 特征标准化 (StandardScaler) 是一个好习惯。

六、课后作业

  1. 多分类:修改代码,直接对鸢尾花 3 分类问题进行训练(LogisticRegression默认支持多分类multi_class='auto')。查看其准确率。
  2. 换个模型:查阅 sklearn 文档,使用KNeighborsClassifier(K近邻) 或SVC(支持向量机) 来解决同样的问题,对比准确率。
  3. 癌症诊断:加载load_breast_cancer数据集,训练一个逻辑回归模型,预测是良性还是恶性肿瘤。

下节预告

Day 84:机器学习进阶 - 决策树与随机森林- 逻辑回归是线性模型,如果数据边界是弯曲的怎么办?明天我们学习强大的非线性模型——决策树,以及它的"加强版"随机森林。


系列导航

  • 上一篇:Day 82 - 机器学习入门Scikit-Learn
  • 下一篇:Day 84 - 决策树与随机森林(待更新)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询