当前位置: 首页 > backend >正文

机器学习--分类算法

一、分类算法是什么?

简单说:教会计算机根据已有经验做选择题。
生活例子

  • 判断水果是苹果还是橙子(根据颜色、形状、重量)

  • 预测邮件是正常还是垃圾邮件

  • 诊断患者是否患有某种疾病


二、5大经典分类算法(附比喻)

1. 决策树 —— 最像人类的决策方式

工作原理:像玩「20个问题」猜谜游戏,通过一系列问题逐步缩小范围
可视化例子

Python代码

from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier(max_depth=3)
tree.fit(X_train, y_train)# 可视化决策树
from sklearn.tree import plot_tree
plot_tree(tree, feature_names=feature_names)
 

特点
✅ 可解释性强(能画出决策路径)
⚠️ 容易过拟合(需要设置max_depth等参数)


2. K近邻(KNN) —— 近朱者赤

核心思想:看最近的K个邻居属于哪类
生活比喻:搬新家时,参考周围5户人家的装修风格决定自家风格

距离计算(以2个特征为例):

距离=(年龄差)2+(收入差)2距离=(年龄差)2+(收入差)2​

代码实现

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
 

特点
✅ 无需训练过程(惰性学习)
⚠️ 计算成本高(需存储所有数据)


3. 逻辑回归 —— 概率预测专家

虽然叫回归,实际是分类算法
核心:用S型函数将线性结果转换为概率
Sigmoid函数

P=11+e−(wx+b)P=1+e−(wx+b)1​

代码实现

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr.fit(X_train, y_train)
 

特点
✅ 输出可解释(直接得到概率)
⚠️ 只能处理线性可分数据


4. 支持向量机(SVM) —— 边界最大化专家

核心思想:找到最宽的"隔离带"分开两类数据
生活比喻:在两群打架的小朋友之间画最宽的安全线

核技巧:通过变换处理非线性数据

from sklearn.svm import SVC
svm = SVC(kernel='rbf', C=1.0)  # 高斯核
svm.fit(X_train, y_train)
 

特点
✅ 小样本效果优秀
⚠️ 对缺失数据敏感


5. 随机森林 —— 集体智慧的胜利

工作原理:多个决策树投票决定结果
比喻:医生会诊,综合多位专家意见

代码实现

from sklearn.ensemble import RandomForestClassifier
forest = RandomForestClassifier(n_estimators=100)
forest.fit(X_train, y_train)

特点
✅ 抗过拟合能力强
⚠️ 可解释性降低


三、算法选择指南(新手友好版)

你的数据特点推荐算法原因
需要解释为什么这样分类决策树可可视化决策路径
数据有明显空间分布规律KNN近邻即相似
样本量小(<1万)SVM高维表现好
需要概率输出逻辑回归直接输出概率
追求最高准确率随机森林集成方法效果稳定

四、模型评估四件套

  1. 混淆矩阵:看清所有预测对错

    from sklearn.metrics import confusion_matrix
    confusion_matrix(y_true, y_pred)
     

    混淆矩阵示例

  2. 常用指标

    • 准确率(Accuracy):整体正确率

    • 精确率(Precision):预测为正的准确率

    • 召回率(Recall):实际为正的检出率

    • F1分数:精确率和召回率的调和平均


五、避坑指南

  1. 数据陷阱

    • 类别不平衡时不要只看准确率(比如99%正常邮件,1%垃圾邮件)

    • 解决方法:用F1-score或AUC-ROC

  2. 特征陷阱

    • KNN/SVM必须做特征缩放(如StandardScaler)

    • 决策树不需要缩放

  3. 代码陷阱

    # 错误!应该在训练集上fit后transform测试集
    X_scaled = StandardScaler().fit_transform(X_all)  # ❌# 正确做法
    scaler = StandardScaler().fit(X_train)
    X_test_scaled = scaler.transform(X_test)  # ✅
     

六、实战建议

  1. 初学者项目

    • 鸢尾花分类(内置数据集)

    • Titanic生存预测(Kaggle入门赛)

http://www.xdnf.cn/news/8789.html

相关文章:

  • xml双引号可以不转义
  • 【python实战】中国主要城市经济统计数据分析与预测
  • 力扣395做题笔记
  • 深度学习论文idea:多模态检索
  • 计算机网络总结(物理层,链路层)
  • 【深度学习】2. 从梯度推导到优化策略:反向传播与 SGD, Mini SGD
  • 最好用的wordpress外贸主题
  • 【概率论基本概念02】最大似然性
  • 正则表达式:字符串模式匹配的利器
  • Bochs下去运行linux-0.11
  • 云原生安全基石:深度解析HTTPS协议(从原理到实战)
  • 图论核心:深度搜索DFS 与广度搜索BFS
  • 【React】createPortal - 简单的Message和Modal组件
  • JAVA集合(含List、Map、Set)(超详细版)
  • 阿里云国际版香港轻量云服务器:CN2 GIA加持,征服海外网络的“速度与激情”!
  • 搭建 C/C++_CMake_Boost_git 开发环境
  • 【最新版】Arduino IDE的安装入门Demo
  • 异步编程与axios技术
  • 代码随想录算法训练营 Day53 图论Ⅳ 字符串接龙 有向图 岛屿周长
  • C#索引器详解:让对象像数组一样被访问
  • 自用git记录
  • Java反射机制详细笔记
  • 项目管理学习-CSPM4(2)
  • 代码随想录第42天:图论3
  • 嵌入式硬件---施密特触发器单稳态触发器多谐振荡器
  • 【Excel VBA 】窗体控件分类
  • 【TDengine源码阅读】举例说明pthread_once_t和PTHREAD_ONCE_INIT
  • STM32 输出比较输出PWM控制呼吸灯小实验(2种实现 铁头山羊与江协科技)
  • Ansible安装
  • C++面向对象编程实战:继承与派生全解析