🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度
最近和几位刚上研一的同学交流,发现大家对“机器学习怎么入门”普遍感到迷茫。面对海量的算法、复杂的数学推导和五花八门的教程,很容易陷入“从入门到放弃”的困境。其实,对于绝大多数以应用和科研入门为目标的研究生来说,初期并不需要面面俱到。抓住核心,建立体系,快速实践,才是最高效的路径。
本文将为你规划一条清晰的“机器学习极速入门”路线。我们不会罗列几十种算法,而是聚焦于4个最核心、最具代表性的基础算法。通过吃透这4个算法,你不仅能掌握机器学习的基本工作流和核心思想,更能为后续学习深度学习、参与科研项目打下坚实的基石。整个学习过程,如果方法得当,集中精力投入约10小时,就能建立起对机器学习的整体认知和初步的实践能力。
本文适合谁?
- 研一新生,急需确定机器学习学习路线。
- 有一定Python基础,但对机器学习感到陌生的开发者。
- 希望快速建立机器学习知识体系,为深度学习过渡做准备的同学。
你将学到什么?
- 理解机器学习解决什么问题和基本流程。
- 掌握4大核心算法的原理、应用场景及Python实现。
- 学会使用
scikit-learn库完成从数据预处理到模型评估的全流程。 - 获得可直接运行和修改的实战代码,建立学习信心。
1. 机器学习入门:核心理念与学习路径
在深入算法之前,我们必须先统一思想:机器学习是什么?我们为什么要学这些算法?
1.1 什么是机器学习?
用最通俗的话讲,机器学习是让计算机从数据中学习规律,并利用这些规律对未知数据进行预测或决策的一门技术。它不同于传统的编程(程序员编写明确的规则),而是由计算机自动从大量样本(数据)中总结出“规则”(模型)。
一个经典的例子是垃圾邮件过滤。传统方法需要程序员不断编写规则来识别“促销”、“免费”等关键词,但垃圾邮件发送者会不断变化措辞。机器学习方法则是给计算机提供成千上万封标记好的“垃圾邮件”和“正常邮件”,让它自己学习区分两者的特征模式,从而更灵活、更准确地识别新邮件。
1.2 为什么从这4个算法开始?
机器学习算法家族庞大,包括线性回归、逻辑回归、决策树、支持向量机(SVM)、朴素贝叶斯、K近邻(KNN)、聚类算法、降维算法等等。对于初学者,全盘学习容易迷失细节,失去重点。
我们精选的4大核心算法是:
- 线性回归:理解“回归”问题的基石,贯穿参数学习、损失函数、梯度下降等核心概念。
- 逻辑回归:虽然是“回归”之名,实为“分类”之祖,是理解分类问题和概率输出的关键。
- 决策树:直观易懂,是理解“树模型”和“特征选择”的绝佳起点,也是强大集成模型(如随机森林、XGBoost)的基础。
- K-均值聚类:代表“无监督学习”,帮你理解如何在没有标签的数据中发现内在结构。
掌握这4个算法,你就能覆盖监督学习(回归、分类)和无监督学习(聚类)两大主流任务,理解机器学习中最核心的“学习”过程是如何发生的。这比泛泛了解十个算法的名字要有用得多。
1.3 10小时高效学习法
“10小时”不是一个精确的计时,而是一种强调聚焦和深度的学习策略。建议分配如下:
- 第1-2小时:搭建Python数据科学环境,了解机器学习基本流程。
- 第3-5小时:攻克线性回归与逻辑回归,理解数学思想与
scikit-learn实现。 - 第6-8小时:学习决策树与K-均值聚类,动手完成两个小项目。
- 第9-10小时:综合回顾,用学到的所有知识分析一个完整数据集(如鸢尾花数据集),并思考如何过渡到深度学习。
核心是:看原理 -> 跑通代码 -> 调整参数观察变化 -> 总结规律。避免陷入复杂的数学证明而迟迟不动手。
2. 环境准备:打造你的机器学习工作台
工欲善其事,必先利其器。一个稳定、统一的环境能避免大量兼容性问题。
2.1 Python与关键库安装
我们强烈推荐使用Anaconda来管理Python环境,它能轻松解决库之间的依赖问题。
- 安装Anaconda:访问 Anaconda官网 下载并安装对应你操作系统的版本。
- 创建独立环境:打开终端(或Anaconda Prompt),执行以下命令创建一个名为
ml_basic的纯净环境。
(Python 3.8或3.9都是稳定选择)conda create -n ml_basic python=3.9 - 激活环境并安装库:
conda activate ml_basic pip install numpy pandas matplotlib scikit-learn jupyternumpy: 数值计算核心库,处理多维数组。pandas: 数据分析利器,处理表格数据。matplotlib: 绘图库,可视化数据和结果。scikit-learn: 本文的核心,机器学习算法库。jupyter: 交互式笔记本,非常适合学习和演示。
2.2 验证安装与第一个程序
创建一个新的Jupyter Notebook或Python脚本,运行以下代码验证环境:
# 导入库并打印版本 import numpy as np import pandas as pd import matplotlib.pyplot as plt import sklearn print(f"NumPy版本: {np.__version__}") print(f"Pandas版本: {pd.__version__}") print(f"Scikit-learn版本: {sklearn.__version__}") # 生成一些简单数据并绘图 x = np.linspace(0, 10, 100) y = np.sin(x) plt.plot(x, y) plt.title("环境测试 - 正弦曲线") plt.xlabel("X") plt.ylabel("sin(X)") plt.grid(True) plt.show()如果成功显示出正弦波图,恭喜你,环境搭建成功!
3. 核心算法一:线性回归 —— 预测的起点
线性回归是理解机器学习世界的“Hello World”。它用于解决回归问题,即预测一个连续值(如房价、销售额、温度)。
3.1 算法原理与核心思想
目标:找到一条直线(或超平面)y = w * x + b,使得这条直线最能拟合数据点。这里的w是权重(斜率),b是偏置(截距),它们就是模型要学习的“参数”。
如何学习?通过最小化损失函数。在线性回归中,常用均方误差(MSE)作为损失函数,它计算所有预测值与真实值之差的平方和。我们的目标就是找到一组w和b,使MSE最小。
如何找到最小点?使用梯度下降算法。想象你站在山上,要最快下到山谷。梯度下降就是通过计算损失函数对参数的梯度(导数),沿着梯度下降的方向一步步更新参数,最终找到山谷(损失最小点)。
3.2 手把手实现:从零到预测
我们使用scikit-learn内置的波士顿房价数据集(在较新版本中已被移除,我们用fetch_california_housing替代,原理相同)进行演示。
# 导入必要的库 from sklearn.datasets import fetch_california_housing from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score import matplotlib.pyplot as plt # 1. 加载数据 california = fetch_california_housing() X = california.data # 特征数据,例如人均收入、房龄等 y = california.target # 目标值,房屋中位数价格 print(f"数据集形状: {X.shape}") # (20640, 8) 表示20640个样本,8个特征 print(f"特征名: {california.feature_names}") # 2. 划分训练集和测试集(常用比例:70%训练,30%测试) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 3. 创建并训练模型 model = LinearRegression() model.fit(X_train, y_train) # 核心训练步骤,模型在此过程中学习 w 和 b # 4. 查看学到的参数 print(f"模型截距 (b): {model.intercept_:.4f}") print(f"模型系数 (w): {model.coef_}") # 5. 在测试集上进行预测 y_pred = model.predict(X_test) # 6. 评估模型性能 mse = mean_squared_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) print(f"均方误差 (MSE): {mse:.4f}") print(f"决定系数 (R^2 Score): {r2:.4f}") # 7. 可视化预测结果 vs 真实结果 (取前50个样本) plt.figure(figsize=(10, 6)) plt.scatter(range(50), y_test[:50], color='blue', label='真实值', alpha=0.6) plt.scatter(range(50), y_pred[:50], color='red', label='预测值', alpha=0.6) plt.plot([0, 50], [y_test[:50].min(), y_test[:50].max()], color='green', linestyle='--', label='理想线') plt.xlabel('样本索引') plt.ylabel('房屋价格') plt.title('线性回归预测结果对比 (前50个测试样本)') plt.legend() plt.grid(True) plt.show()代码解读与关键点:
train_test_split: 将数据随机打乱后分割,确保模型评估的公正性。random_state固定随机种子,使结果可复现。model.fit(): 这是“学习”发生的地方,内部通过优化算法(对于线性回归,通常是解析解或梯度下降)求解最佳参数。model.predict(): 使用学到的参数对新数据做预测。- MSE:越小越好,表示预测误差小。
- R^2 Score:越接近1越好,表示模型对数据变异的解释能力强。
4. 核心算法二:逻辑回归 —— 分类的大门
别被名字迷惑!逻辑回归是解决二分类问题(是/否,垃圾邮件/正常邮件,患病/健康)的经典算法。它输出的是一个概率值(0到1之间)。
4.1 从线性到非线性:Sigmoid函数
线性回归的输出是连续值,而分类需要的是类别。逻辑回归在线性回归z = w*x + b的基础上,套了一个Sigmoid函数,将z映射到(0,1)区间。σ(z) = 1 / (1 + e^{-z})这个输出可以解释为“样本属于正类的概率”。通常,设置一个阈值(如0.5),概率大于阈值则判为正类,否则为负类。
4.2 实战:鸢尾花分类
我们使用经典的鸢尾花数据集,它包含3类花,我们先将其简化为二分类问题(Setosa vs Non-Setosa)。
from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, confusion_matrix, classification_report import seaborn as sns import matplotlib.pyplot as plt # 1. 加载数据 iris = load_iris() X = iris.data y = iris.target # 为了方便演示二分类,我们只取前100个样本(对应Setosa和Versicolor两类) # 并将Versicolor视为正类(1),Setosa视为负类(0) X = X[:100] y = y[:100] y = (y == 1).astype(int) # 将标签转换为0和1 print(f“二分类数据集形状: {X.shape}”) print(f“类别分布: {np.bincount(y)}”) # 2. 划分数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42, stratify=y) # 3. 创建并训练逻辑回归模型 # penalty='l2' 表示使用L2正则化防止过拟合,C是正则化强度的倒数,C越小正则化越强 log_model = LogisticRegression(penalty='l2', C=1.0, solver='lbfgs', max_iter=200) log_model.fit(X_train, y_train) # 4. 预测与评估 y_pred = log_model.predict(X_test) y_pred_proba = log_model.predict_proba(X_test)[:, 1] # 获取属于正类(类别1)的概率 print(“测试集前5个样本的预测概率:”, y_pred_proba[:5]) print(“测试集前5个样本的预测类别:”, y_pred[:5]) print(“对应的真实类别:”, y_test[:5]) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print(f“模型准确率: {accuracy:.4f}”) # 更详细的评估报告 print(“\n分类报告:”) print(classification_report(y_test, y_pred, target_names=[‘Setosa’, ‘Versicolor’])) # 绘制混淆矩阵 cm = confusion_matrix(y_test, y_pred) plt.figure(figsize=(6, 5)) sns.heatmap(cm, annot=True, fmt=‘d’, cmap=‘Blues’, xticklabels=[‘Setosa’, ‘Versicolor’], yticklabels=[‘Setosa’, ‘Versicolor’]) plt.ylabel(‘真实标签’) plt.xlabel(‘预测标签’) plt.title(‘逻辑回归混淆矩阵’) plt.show()核心要点:
predict_proba(): 这是逻辑回归与线性回归的关键区别,它返回每个类别的预测概率。- 正则化 (
penalty):为了防止模型在训练集上表现太好(过拟合)而在测试集上表现差,我们引入正则化项(L1或L2)来惩罚过大的模型参数。C值控制正则化强度,C越小,惩罚越重。 - 评估指标:分类问题不仅看准确率,还要看精确率(预测为正的样本中真正为正的比例)、召回率(真正的正样本中被预测出来的比例)和F1分数(二者的调和平均)。
classification_report提供了这些信息。
5. 核心算法三:决策树 —— 直观的可解释性
决策树模仿人类做决策的过程,通过一系列“如果...那么...”的问题对数据进行划分。它非常直观,易于理解和解释。
5.1 树是如何生长的?
决策树学习的关键在于如何选择每个节点上用于划分数据的特征。常用的准则有:
- 信息增益(ID3算法):选择划分后信息不确定性减少最多的特征。
- 基尼不纯度(CART算法):选择划分后数据“不纯”程度降低最多的特征。
scikit-learn默认使用这个。
树会一直生长,直到满足停止条件(如达到最大深度、节点样本数过少等)。
5.2 实战:预测泰坦尼克号幸存者
这是一个经典的分类问题。我们使用决策树来预测乘客是否幸存。
import pandas as pd from sklearn.tree import DecisionTreeClassifier, plot_tree from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, classification_report from sklearn.preprocessing import LabelEncoder import matplotlib.pyplot as plt # 1. 加载数据(这里假设你已下载了titanic.csv,或使用seaborn内置数据集) # 为了示例,我们创建一个简化的模拟数据框。实际中请加载完整数据。 # 模拟数据 data = { ‘Pclass’: [1, 1, 3, 2, 3, 2, 1, 3, 3, 2], ‘Sex’: [‘male’, ‘female’, ‘female’, ‘male’, ‘male’, ‘female’, ‘female’, ‘male’, ‘female’, ‘male’], ‘Age’: [22, 38, 26, 35, 35, None, 54, 2, 27, 14], # 包含缺失值 ‘SibSp’: [1, 1, 0, 0, 0, 1, 0, 3, 0, 1], ‘Parch’: [0, 0, 0, 0, 0, 0, 0, 1, 2, 0], ‘Fare’: [7.25, 71.28, 7.92, 21.08, 8.05, 26.0, 51.86, 21.08, 11.13, 30.07], ‘Survived’: [0, 1, 1, 0, 0, 1, 0, 0, 1, 0] } df = pd.DataFrame(data) # 2. 数据预处理(机器学习中非常关键的一步!) # 处理缺失值:用年龄中位数填充 df[‘Age’].fillna(df[‘Age’].median(), inplace=True) # 处理分类特征:将‘Sex’转换为数值(male->0, female->1) le = LabelEncoder() df[‘Sex_encoded’] = le.fit_transform(df[‘Sex’]) # 注意:实际应用中可能使用One-Hot编码 # 选择特征和目标列 feature_cols = [‘Pclass’, ‘Sex_encoded’, ‘Age’, ‘SibSp’, ‘Parch’, ‘Fare’] X = df[feature_cols] y = df[‘Survived’] # 3. 划分数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 4. 创建并训练决策树模型 # max_depth控制树的最大深度,防止过拟合 tree_model = DecisionTreeClassifier(max_depth=3, random_state=42) tree_model.fit(X_train, y_train) # 5. 预测与评估 y_pred = tree_model.predict(X_test) print(“准确率:”, accuracy_score(y_test, y_pred)) print(“\n分类报告:”) print(classification_report(y_test, y_pred)) # 6. 可视化决策树(理解模型的关键!) plt.figure(figsize=(12, 8)) plot_tree(tree_model, feature_names=feature_cols, class_names=[‘Died’, ‘Survived’], filled=True, # 填充颜色 rounded=True, fontsize=10) plt.title(“泰坦尼克号幸存者预测决策树 (max_depth=3)”) plt.show() # 7. 查看特征重要性 importance = pd.DataFrame({‘feature’: feature_cols, ‘importance’: tree_model.feature_importances_}) importance = importance.sort_values(‘importance’, ascending=False) print(“\n特征重要性:”) print(importance)决策树的优势与陷阱:
- 优势:易于理解和解释,不需要复杂的特征缩放,能处理数值和类别数据。
- 陷阱(过拟合):如果不加限制,树会生长得非常深,直到完美拟合训练数据(包括噪声),导致在未知数据上表现很差。这就是为什么我们需要设置
max_depth、min_samples_split等参数。 - 特征重要性:决策树可以输出每个特征对决策的帮助程度,这是模型可解释性的重要体现。
6. 核心算法四:K-均值聚类 —— 发现数据的内在结构
前面三个算法都属于监督学习,即训练数据都有标签(房价、是否幸存)。K-均值聚类则是无监督学习的代表,它的目标是在没有标签的数据中发现自然分组(簇)。
6.1 算法原理:迭代与收敛
K-均值算法的思想很简单:
- 初始化:随机选择K个点作为初始簇中心(质心)。
- 分配:将每个数据点分配到离它最近的质心所在的簇。
- 更新:重新计算每个簇中所有点的平均值,作为新的质心。
- 重复:重复步骤2和3,直到质心的位置不再发生显著变化(收敛)。
这里的K需要用户预先指定。
6.2 实战:对鸢尾花数据进行聚类
我们使用鸢尾花数据集,但这次不使用标签,看看算法能否自己发现花的类别。
from sklearn.datasets import load_iris from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt import numpy as np # 1. 加载数据 iris = load_iris() X = iris.data # 我们只使用特征,不使用标签y true_labels = iris.target # 真实标签,仅用于最后对比验证 print(f“数据形状: {X.shape}”) # 2. 数据预处理:标准化(对基于距离的算法非常重要!) scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 3. 应用K-Means聚类 # 我们知道鸢尾花有3类,所以设K=3 kmeans = KMeans(n_clusters=3, random_state=42, n_init=‘auto’) # n_init='auto' 是较新版本的参数 cluster_labels = kmeans.fit_predict(X_scaled) # 4. 查看结果 print(“前10个样本的聚类标签:”, cluster_labels[:10]) print(“前10个样本的真实标签:”, true_labels[:10]) print(“簇中心坐标:\n”, kmeans.cluster_centers_) # 5. 可视化聚类结果(取前两个特征) plt.figure(figsize=(12, 5)) # 子图1:聚类结果 plt.subplot(1, 2, 1) scatter = plt.scatter(X[:, 0], X[:, 1], c=cluster_labels, cmap=‘viridis’, alpha=0.7) plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c=‘red’, marker=‘X’, label=‘簇中心’) plt.xlabel(iris.feature_names[0]) plt.ylabel(iris.feature_names[1]) plt.title(‘K-Means聚类结果 (K=3)’) plt.legend() plt.colorbar(scatter, label=‘簇标签’) # 子图2:真实标签(用于对比) plt.subplot(1, 2, 2) plt.scatter(X[:, 0], X[:, 1], c=true_labels, cmap=‘viridis’, alpha=0.7) plt.xlabel(iris.feature_names[0]) plt.ylabel(iris.feature_names[1]) plt.title(‘鸢尾花真实类别’) plt.colorbar(label=‘真实标签’) plt.tight_layout() plt.show() # 6. 如何选择K值?—— 肘部法则(Elbow Method) # 计算不同K值下的惯性(inertia,即样本到其最近质心的距离平方和) inertias = [] K_range = range(1, 11) for k in K_range: kmeans_temp = KMeans(n_clusters=k, random_state=42, n_init=‘auto’) kmeans_temp.fit(X_scaled) inertias.append(kmeans_temp.inertia_) # 绘制肘部法则图 plt.figure(figsize=(8, 5)) plt.plot(K_range, inertias, ‘bo-’) plt.xlabel(‘簇的数量 K’) plt.ylabel(‘惯性 (Inertia)’) plt.title(‘肘部法则:选择最优K值’) plt.grid(True) plt.show()关键解读:
- 标准化:因为K-均值基于距离,不同特征量纲不同会严重影响结果(例如,以“米”和“毫米”为单位)。标准化使所有特征具有零均值和单位方差,变得可比。
- 惯性:衡量簇内样本的紧密程度。惯性越小,簇内样本越相似。
- 肘部法则:随着K增大,惯性会下降。我们寻找惯性下降速度突然变缓的那个“肘点”,作为合理的K值。从图中可以看到,在K=3之后,惯性下降变缓,这与真实类别数吻合。
7. 融会贯通:综合项目与深度学习桥梁
学完四个算法,你已经掌握了机器学习的核心范式。现在,让我们做一个综合练习,并思考如何迈向深度学习。
7.1 综合小项目:葡萄酒质量预测
这是一个回归与分类结合的问题。我们使用UCI的葡萄酒质量数据集,根据酒的化学成分预测其质量评分(0-10分)。我们可以先尝试回归(预测具体分数),再尝试分类(预测“好酒”/“差酒”)。
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression, LogisticRegression from sklearn.tree import DecisionTreeRegressor, DecisionTreeClassifier from sklearn.metrics import mean_squared_error, accuracy_score import numpy as np # 1. 加载数据(假设文件为winequality-red.csv) # 你可以从UCI网站下载:https://archive.ics.uci.edu/ml/datasets/Wine+Quality # 这里我们假设数据已加载到DataFrame `df` 中 # df = pd.read_csv(‘winequality-red.csv’, sep=‘;’) # 为演示,我们创建一个模拟数据框架构 print(“项目:葡萄酒质量预测”) print(“步骤:1. 数据加载与探索 2. 回归预测分数 3. 分类预测等级”) # 假设df已存在,包含特征和‘quality’列 # 模拟数据创建(实际请替换为真实数据加载) np.random.seed(42) n_samples = 1000 n_features = 11 X_sim = np.random.randn(n_samples, n_features) # 模拟一个简单的线性关系加上噪声来生成质量分数 coef = np.random.randn(n_features) y_sim_reg = X_sim.dot(coef) + np.random.randn(n_samples) * 0.5 y_sim_reg = (y_sim_reg - y_sim_reg.min()) / (y_sim_reg.max() - y_sim_reg.min()) * 10 # 缩放至0-10 y_sim_reg = y_sim_reg.round().astype(int) # 取整作为分数 # 生成分类标签(例如,质量>=6为好酒,否则为差酒) y_sim_clf = (y_sim_reg >= 6).astype(int) df_sim = pd.DataFrame(X_sim, columns=[f‘feature_{i}’ for i in range(n_features)]) df_sim[‘quality_reg’] = y_sim_reg df_sim[‘quality_clf’] = y_sim_clf print(f“模拟数据集形状: {df_sim.shape}”) print(“质量分数分布:”, df_sim[‘quality_reg’].value_counts().sort_index()) print(“好酒(1) vs 差酒(0)分布:”, df_sim[‘quality_clf’].value_counts()) # 2. 回归任务:预测具体分数 X_reg = df_sim[[f‘feature_{i}’ for i in range(n_features)]].values y_reg = df_sim[‘quality_reg’].values X_train_reg, X_test_reg, y_train_reg, y_test_reg = train_test_split(X_reg, y_reg, test_size=0.2, random_state=42) scaler_reg = StandardScaler() X_train_reg_scaled = scaler_reg.fit_transform(X_train_reg) X_test_reg_scaled = scaler_reg.transform(X_test_reg) # 使用线性回归 lr_model = LinearRegression() lr_model.fit(X_train_reg_scaled, y_train_reg) y_pred_reg = lr_model.predict(X_test_reg_scaled) mse_reg = mean_squared_error(y_test_reg, y_pred_reg) print(f“\n[回归任务] 线性回归 MSE: {mse_reg:.4f}”) # 使用决策树回归 tree_reg_model = DecisionTreeRegressor(max_depth=5, random_state=42) tree_reg_model.fit(X_train_reg_scaled, y_train_reg) y_pred_tree_reg = tree_reg_model.predict(X_test_reg_scaled) mse_tree_reg = mean_squared_error(y_test_reg, y_pred_tree_reg) print(f“[回归任务] 决策树回归 MSE: {mse_tree_reg:.4f}”) # 3. 分类任务:预测好酒/差酒 X_clf = X_reg # 特征相同 y_clf = df_sim[‘quality_clf’].values X_train_clf, X_test_clf, y_train_clf, y_test_clf = train_test_split(X_clf, y_clf, test_size=0.2, random_state=42) scaler_clf = StandardScaler() X_train_clf_scaled = scaler_clf.fit_transform(X_train_clf) X_test_clf_scaled = scaler_clf.transform(X_test_clf) # 使用逻辑回归 log_model = LogisticRegression(max_iter=1000, random_state=42) log_model.fit(X_train_clf_scaled, y_train_clf) y_pred_log = log_model.predict(X_test_clf_scaled) acc_log = accuracy_score(y_test_clf, y_pred_log) print(f“\n[分类任务] 逻辑回归 准确率: {acc_log:.4f}”) # 使用决策树分类 tree_clf_model = DecisionTreeClassifier(max_depth=5, random_state=42) tree_clf_model.fit(X_train_clf_scaled, y_train_clf) y_pred_tree_clf = tree_clf_model.predict(X_test_clf_scaled) acc_tree_clf = accuracy_score(y_test_clf, y_pred_tree_clf) print(f“[分类任务] 决策树分类 准确率: {acc_tree_clf:.4f}”)这个项目让你实践了完整流程:数据准备 -> 特征工程(这里只是标准化)-> 模型选择与训练 -> 评估。你可以尝试更换模型参数、使用真实数据集,并比较不同算法的表现。
7.2 从机器学习到深度学习
学完这四大基础算法,你对“学习”这件事已经有了直观感受:模型通过优化目标(损失函数)从数据中调整参数。深度学习可以看作是机器学习的延伸,其核心依然是这个范式,但有了关键进化:
- 模型结构:从简单的直线、树,变成了复杂的多层神经网络(深度)。这些网络可以自动学习层次化的特征表示。
- 特征工程:传统机器学习严重依赖人工设计和选择特征(Feature Engineering)。深度学习,尤其是卷积神经网络(CNN)和循环神经网络(RNN),具有强大的特征学习能力,能从原始数据(如图像像素、文本序列)中自动提取有效特征。
- 数据量与算力:深度学习通常在大量数据上才能发挥优势,并且需要更强的计算能力(GPU)。
你的下一步学习路径建议:
- 巩固基础:将本文的4个算法代码反复运行、修改参数、更换数据集,直到彻底理解。
- 学习评估与调优:深入理解交叉验证、网格搜索(GridSearchCV)、学习曲线等模型选择和超参数调优技术。
- 探索集成学习:了解Bagging(如随机森林)和Boosting(如XGBoost, LightGBM),它们是建立在决策树等弱学习器之上的强大工具。
- 进军深度学习:
- 框架选择:PyTorch(研究友好、动态图)或 TensorFlow/Keras(工业部署成熟、静态图)。
- 核心概念:张量(Tensor)、自动求导(Autograd)、神经网络层(Linear, Conv2d, LSTM)、损失函数、优化器(SGD, Adam)。
- 第一个网络:从全连接网络(MLP)在MNIST手写数字识别上开始,然后学习CNN处理图像,再学习RNN/LSTM处理序列数据。
记住,深度学习不是空中楼阁。你在这10小时里建立的关于数据划分、损失函数、过拟合、评估指标的概念,是通往深度学习世界的坚固桥梁。
🚀 30+款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度