【机器学习】机器学习新手入门概述
目录
一、机器学习概念
1.1基本概念
1.2 主要类型
1.2.1 监督学习(Supervised Learning)
(1)基本介绍
(2)任务目标
(3)常见算法
(4)应用场景
1.2.2 无监督学习(Unsupervised Learning)
(1)基本概念
(2)应用任务
(3)常见算法
(4)应用场景
1.2.3 强化学习(Reinforcement Learning)
(1)基本概念
(2)经典方法
(3)应用场景
1.2.4 扩展类型
(1)半监督学习
(2)自监督学习
二、关于sklearn机器学习库
2.1 基本介绍
2.1.1 简单介绍
2.1.2 优点介绍
2.1.3 不足
2.2 主要模块
2.3 流程概述
2.3.1 获取数据阶段(Data Acquisition)
(1)sklearn玩具数据集
(2)sklearn现实世界数据集
(3)sklearn加载玩具数据集
2.3.2 数据预处理阶段(Data Preprocessing)
(1)MinMaxScaler 归一化
(2)normalize归一化
(3)StandardScaler 标准化
(4)相关注意补充
2.3.3 特征工程阶段(Feature Engineering)
(1)特征选择(Feature Selection)
(2)特征降维(Dimensionality Reduction)
2.3.4 模型构建阶段(Modeling / Training)
2.3.5 模型评估阶段(Evaluation)
(1)对于分类
(2)对于回归
2.3.6 模型优化阶段(Tuning)
(1)超参数调优(Hyperparameter Tuning)
(2)管道 (Pipeline)
(3)交叉验证(Cross Validation)
2.3.7 部署与应用阶段(deployment)
(1)模型保存与加载
(2)构建 API 接口(常用 Flask)
(3)打包发布的常见方式
三、文末总结
一、机器学习概念
1.1基本概念
机器学习(Machine Learning) 是人工智能的一个分支,主要研究让计算机从数据中自动学习规律,并根据学习到的规律进行预测或决策。简言之,它是“用数据训练模型,再用模型处理任务”。
机器学习的核心思想是让计算机通过数据 “自主学习” 规律,而非依赖人工编写的固定规则。传统编程是 “输入规则→输出结果”,而机器学习是 “输入数据和结果→输出规则”,再用学到的规则预测新数据。
1.2 主要类型
1.2.1 监督学习(Supervised Learning)
(1)基本介绍
- 模型在训练时使用带有标签的数据集,学习“输入 ➜ 输出”的映射关系。
- 目的是在给定新输入时预测对应的输出。
(2)任务目标
-
分类:输出是离散的类别标签
-
回归:输出是连续的数值
(3)常见算法
- 分类算法:KNN算法,随机森林,支持向量机SVM,朴素贝叶斯
- 回归算法:线性回归,Lasso回归,支持向量回归 SVR,决策树回归
(4)应用场景
邮件分类,气温预测,图像识别,人脸识别等
1.2.2 无监督学习(Unsupervised Learning)
(1)基本概念
- 训练数据没有标签,算法通过分析数据的结构、自主发现隐藏模式或规律。
(2)应用任务
-
聚类:将数据自动分组
-
降维:压缩特征维度,保持信息
(3)常见算法
- 聚类算法:K-Means,DBSCAN,层次聚类
- 降维算法:主成分分析(PCA),t-SNE(非线性降维),自编码器(Autoencoder)
(4)应用场景
用户分群(电商客户画像),异常检测(信用卡欺诈),数据可视化
1.2.3 强化学习(Reinforcement Learning)
(1)基本概念
- 智能体(Agent)在环境中不断试错,通过“奖赏-惩罚”机制学习如何采取最优策略以最大化长期回报。
- 关键词:状态(State),动作(Action),奖励(Reward),策略(Policy)
(2)经典方法
-
Q-learning(离线强化学习)
-
深度强化学习(Deep Q Network, DDPG, PPO)
(3)应用场景
游戏 AI(下棋、打 Atari),自动驾驶,机器人控制,股票交易策略优化等
1.2.4 扩展类型
(1)半监督学习
- 半监督学习(Semi-Supervised):结合少量有标签数据 + 大量无标签数据
- 应用场景:医学影像(标签难获得)
(2)自监督学习
- 自行构造伪标签从数据中学习表示
- 应用场景:应用于自然语言处理、图像识别;如:BERT、SimCLR、GPT 等深度学习模型的预训练阶段
二、关于sklearn机器学习库
2.1 基本介绍
2.1.1 简单介绍
scikit-learn(简称
sklearn)
是 Python 中最流行的机器学习库之一,其对初学者友好、功能完整、工程可用,是学习与应用机器学习的常用工具。我们现在就从sklearn开始学习。
2.1.2 优点介绍
优点 | 说明 |
---|---|
丰富的算法库 | 包含常用的分类、回归、聚类、降维等算法(如 KNN、SVM、决策树、随机森林、KMeans、PCA) |
模块化设计 | 拆分为预处理、建模、调参、评估等步骤,接口统一 |
一致的 API 设计 | 所有模型都支持 .fit() 、.predict() 、.score() 等方法,学习成本低 |
集成交叉验证与调参工具 | 提供 GridSearchCV、cross_val_score 等方法简化模型选择 |
数据预处理与特征工程工具 | 如归一化(Scaler)、特征选择(SelectKBest)、降维(PCA)等 |
文档丰富,社区活跃 | 有详细文档和大量教程,便于学习与查错 |
兼容 NumPy / Pandas | 可与主流数据分析库无缝衔接 |
2.1.3 不足
- 不适合大数据量分布式训练(推荐用 PyTorch、TensorFlow、XGBoost 等工具搭配)
2.2 主要模块
模块 | 功能 |
---|---|
sklearn.datasets | 提供常用数据集,如 load_iris() 、load_digits() 等 |
sklearn.model_selection | 数据划分、交叉验证、网格搜索 |
sklearn.preprocessing | 数据预处理(标准化、归一化、编码等) |
sklearn.feature_selection | 特征选择工具 |
sklearn.decomposition | 降维算法,如 PCA |
sklearn.neighbors | KNN 相关算法 |
sklearn.tree | 决策树、随机森林 |
sklearn.linear_model | 线性回归、逻辑回归等 |
sklearn.svm | 支持向量机 |
sklearn.metrics | 模型评估指标,如准确率、混淆矩阵等 |
2.3 流程概述
本文将以基本讲解与代码示例相结合的方式为读者介绍,这里先简单介绍一下各个阶段:
2.3.1 获取数据阶段(Data Acquisition)
目标:获取结构化的数据,形成特征矩阵 X 和标签 y
(1)sklearn玩具数据集
- 数据量小,数据在sklearn库的本地,只要安装了sklearn,不用上网就可以获取
(2)sklearn现实世界数据集
- 数据量大,数据只能通过网络获取
(3)sklearn加载玩具数据集
1、以鸢尾花数据集为例:
from sklearn.datasets import load_iris
iris = load_iris()#鸢尾花数据
2、特征:
- 花萼长 sepal length
- 花萼宽sepal width
- 花瓣长 petal length
- 花瓣宽 petal width
3、分类:
- 0-Setosa山鸢尾
- 1-versicolor变色鸢尾
- 2-Virginica维吉尼亚鸢尾
4、相关代码介绍:
print(iris.data) #得到特征
print(iris.feature_names) #特征描述
print(iris.target) #目标形状
print(iris.target_names) #目标描述
print(iris.filename) #iris.csv 保存后的文件名
print(iris.DESCR) #数据集的描述
2.3.2 数据预处理阶段(Data Preprocessing)
目标:清洗数据,转化为算法能接受的形式
下面将以数据无量纲化进行相关介绍,无量纲化包括"归一化"和"标准化"
(1)MinMaxScaler 归一化
- 作用:把所有特征缩放到一个固定范围(通常是[0, 1]),适用于不含异常值或对最小最大值敏感的模型(如KNN、神经网络)。
- 公式:
- API:
- sklearn.preprocessing.MinMaxScaler(feature_range)
- fit_transform函数的返回值为ndarray
-
from sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler() X_scaled = scaler.fit_transform(X)
补充:最大值和最小值容易受到异常点影响,所以鲁棒性较差。所以常使用标准化的无量纲处理
(2)normalize归一化
- 作用:将每个样本缩放成单位范数的向量,常用于文本挖掘、余弦相似度等对方向而非大小敏感的场景。
- 公式:有三种,略
- API
from sklearn.preprocessing import normalize normalize(data, norm='l2', axis=1) # data是要归一化的数据 # norm是使用的归一化类型:"l1" "l2" "max # axis=0是列 axis=1是行
- 归一化类型:
-
L1归一化:绝对值相加作为分母,特征值作为分子
-
L2归一化:平方相加作为分母,特征值作为分子
-
max归一化:max作为分母,特征值作为分子
PS:<补充特点>
- 按行处理(样本维度),对每一行向量进行单位化
- 适用于文本数据(如TF-IDF矩阵)
- 不适合数值本身重要的模型(如回归)
(3)StandardScaler 标准化
- 介绍:在机器学习中,标准化是一种数据预处理技术,也称为数据归一化或特征缩放。它的目的是将不同特征的数值范围缩放到统一的标准范围,以便更好地适应一些机器学习算法,特别是那些对输入数据的尺度敏感的算法。
- 作用:将特征变换为均值为0、标准差为1的分布,适用于假设数据服从正态分布的模型(如逻辑回归、SVM、线性回归等)。
- 数学公式:
- 标准化API:
from sklearn.preprocessing import StandardScalerscaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 类型为ndarray
(4)相关注意补充
在数据预处理中,特别是使用如StandardScaler
这样的数据转换器时,fit
、fit_transform
和transform
这三个方法的使用是至关重要的,它们各自有不同的作用:
-
fit:
-
这个方法用来计算数据的统计信息,比如均值和标准差(在
StandardScaler
的情况下)。这些统计信息随后会被用于数据的标准化。 -
你应当仅在训练集上使用
fit
方法。
-
-
fit_transform:
-
这个方法相当于先调用
fit
再调用transform
,但是它在内部执行得更高效。 -
它同样应当仅在训练集上使用,它会计算训练集的统计信息并立即应用到该训练集上。
-
-
transform:
-
这个方法使用已经通过
fit
方法计算出的统计信息来转换数据。 -
它可以应用于任何数据集,包括训练集、验证集或测试集,但是应用时使用的统计信息必须来自于训练集。
-
在预处理数据时,首先需要在训练集X_train
上使用fit_transform
,这样做可以一次性完成统计信息的计算和数据的标准化。这是因为我们需要确保模型是基于训练数据的统计信息进行学习的,而不是整个数据集的统计信息。
2.3.3 特征工程阶段(Feature Engineering)
目的:构造/选择/提取对模型有用的特征
(1)特征选择(Feature Selection)
进行特征提取,比如字典特征提取,文本特征提取
- 过滤法(Filter):
SelectKBest
,f_classif,
选择与目标变量最相关的 K 个特征 - 包裹法(Wrapper):RFE(递归特征消除)
- 嵌入法(Embedded):使用模型选择特征,如 Lasso、树模型
(2)特征降维(Dimensionality Reduction)
-
主成分分析 PCA:
sklearn.decomposition.PCA
-
线性判别分析 LDA(带标签)
-
t-SNE(可视化用)
2.3.4 模型构建阶段(Modeling / Training)
目标:使用算法对数据建模,寻找规律
经过上述的获取数据、数据处理、特征工程后,就可以交给预估器进行机器学习,流程和常用API如下:
1.实例化预估器(估计器)对象(estimator), 预估器对象很多,都是estimator的子类
(1)用于分类的预估器
sklearn.neighbors.KNeighborsClassifier k-近邻
sklearn.naive_bayes.MultinomialNB 贝叶斯
sklearn.linear_model.LogisticRegressioon 逻辑回归
sklearn.tree.DecisionTreeClassifier 决策树
sklearn.ensemble.RandomForestClassifier 随机森林
(2)用于回归的预估器
sklearn.linear_model.LinearRegression线性回归
sklearn.linear_model.Ridge岭回归
(3)用于无监督学习的预估器
sklearn.cluster.KMeans 聚类
2.进行训练,训练结束后生成模型
estimator.fit(x_train, y_train)
3.模型评估
(1)方式1,直接对比
y_predict = estimator.predict(x_test)
y_test == y_predict
(2)方式2, 计算准确率
accuracy = estimator.score(x_test, y_test)
4.使用模型(预测)
y_predict = estimator.predict(x_true)
2.3.5 模型评估阶段(Evaluation)
目标:验证模型的预测能力。
(1)对于分类
指标 | 意义 | sklearn 工具 |
---|
准确率(Accuracy) | 分类正确的样本数占比 | accuracy_score() |
精准率(Precision) | 正类中被预测对的比例 | precision_score() |
召回率(Recall) | 实际正类中被识别的比例 | recall_score() |
F1 值(F1-score) | 精准率和召回率的调和均值 | f1_score() |
混淆矩阵 | 预测对/错的具体分布 | confusion_matrix() |
ROC 曲线 / AUC | 综合评价分类器性能 | roc_curve() , roc_auc_score() |
(2)对于回归
指标 | 意义 | sklearn 工具 |
---|---|---|
均方误差(MSE) | 误差平方平均 | mean_squared_error() |
平均绝对误差(MAE) | 误差绝对值平均 | mean_absolute_error() |
决定系数 R² | 模型拟合程度 | r2_score() |
2.3.6 模型优化阶段(Tuning)
目的:进一步提升模型性能,提高泛化能力,防止过拟合、欠拟合
(1)超参数调优(Hyperparameter Tuning)
超参数(Hyperparameter) 是在模型训练之前手动设置的参数,用于控制模型的结构、训练过程或优化策略,其值无法通过训练数据自动学习得到,需要通过人工调试、网格搜索、随机搜索等方式确定。超参数是模型设计的核心,直接影响模型的性能。
1、方法:
- Grid Search(网格搜索):枚举所有参数组合
- Randomized Search(随机搜索):从参数分布中随机选择组合
- 贝叶斯优化等高级方法(用第三方库如
optuna
)
2、工具:
GridSearchCV
RandomizedSearchCV
3、示例代码:
这里以KNN算法作一个示例:在KNN算法中,k是一个可以人为设置的参数,所以就是一个超参数。使用网格搜索能自动的帮助我们找到最好的超参数值。
from sklearn.model_selection import GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_irisx,y = load_iris(return_X_y=True)knn = KNeighborsClassifier(n_neighbors=5)model = GridSearchCV(knn, param_grid={"n_neighbors": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}, cv=5)model.fit(x, y)print("参数:", model.best_params_)
print("分数:", model.best_score_)
print("最佳K:",model.best_index_)
print("模型:", model.best_estimator_)
# print("结果:", model.cv_results_)# 模型model即可进行预测
model.predict(x)
(2)管道 (Pipeline)
将多个步骤(预处理、特征选择、模型)串联起来自动执行,避免数据泄露。
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifierpipe = Pipeline([('scaler', StandardScaler()),('clf', RandomForestClassifier())
])
pipe.fit(X_train, y_train)
(3)交叉验证(Cross Validation)
- 交叉验证是一种评估模型泛化能力的核心方法,其核心目标是解决 “如何用有限数据更可靠地判断模型是否能在新数据上表现良好” 的问题。
-
保留交叉验证(HoldOut Cross-validation )
-
k 折交叉验证(k-fold Cross-Validation)
-
分层 k 折交叉验证(Stratified k-fold)
-
留一交叉验证(Leave-One-Out CV, LOOCV)
-
时间序列交叉验证(Time Series CV)
2.3.7 部署与应用阶段(deployment)
目标:将训练好的模型部署到生产环境中,比如放到 Web 页面、API 接口中使用。
(1)模型保存与加载
- 保存模型:
import joblib# 保存模型到指定路径
joblib.dump(model, "../src/modle/KNN.pkl")
# 保存转换器(可选)
joblib.dump(transfer, "../src/modle/transfer.pkl")
- 加载模型:
import joblibmodel = joblib.load("../src/modle/KNN.pkl")
transfer = joblib.load("../src/modle/transfer.pkl")
(2)构建 API 接口(常用 Flask)
简单举个例子:
from flask import Flask, request, jsonify
import joblibapp = Flask(__name__)
model = joblib.load('my_model.pkl')@app.route('/predict', methods=['POST'])
def predict():data = request.get_json()features = [data['feature1'], data['feature2']]result = model.predict([features])return jsonify({'prediction': int(result[0])})# 启动服务:flask run
(3)打包发布的常见方式
部署方式 | 说明 |
---|---|
Flask / FastAPI | 构建 RESTful API,适合原型与小项目 |
Web前端(React/Vue) | 调用 API 接口进行预测 |
Docker 容器化 | 封装成镜像部署在任意服务器 |
云部署(阿里云、AWS、GCP) | 在云端创建可访问服务 |
使用 Streamlit | 快速搭建交互式 Web 应用展示模型效果 |
三、文末总结
本篇文章的学习路线和标准流程的设计,旨在帮助初学者快速建立起一个知识架构,全面地理解机器学习项目的每个环节,并掌握从数据到部署的完整技术栈。每个阶段都对应了机器学习的核心技能和思维方式,进而培养独立解决实际问题的能力。从流程入手,逐个突破每个环节的核心技能,再通过完整项目串联,是掌握机器学习的高效路径。
在学习机器学习的过程中,需要注意几点核心原则:首先是理论与实践结合,在学习过程中我们会不断接触到高等数学的知识(线性代数、概率论等),要能够将数学基础与模型原理结合起来理解和学习,再通过具体项目进行实践;其次是以业务为导向,所有步骤都需围绕 “解决实际问题”,归根到底我们是要面向应用、服务于实际生产的,在之后文章中也会着重体现这一点;再有就是要具备迭代思维,机器学习是 “数据→模型→评估→优化” 的循环,没有 “完美模型”,只有 “更适合当前场景的模型”。暂时想到这么多。