机器学习是人工智能领域最活跃的研究方向之一,也是池州学院计算机科学专业的重要课程。这篇文章是我对常见机器学习算法的学习整理,涵盖了监督学习、无监督学习的核心算法以及模型评估方法,并附上 scikit-learn 的使用示例。
一、监督学习算法
监督学习是指使用带有标签的训练数据来学习输入与输出之间映射关系的机器学习方法。简单来说,就是给算法”喂”正确答案,让它学会做题。
1. 线性回归(Linear Regression)
线性回归是最基础的回归算法,假设特征与目标变量之间存在线性关系。它的目标是找到一条最佳拟合直线(或超平面),使得预测值与真实值之间的误差最小。线性回归的优点是简单、可解释性强、训练速度快,适用于预测房价、销售额等连续值场景。
from sklearn.linear_model import LinearRegressionfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import mean_squared_error
# 准备数据X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 训练模型model = LinearRegression()model.fit(X_train, y_train)
# 预测与评估y_pred = model.predict(X_test)print(f"MSE: {mean_squared_error(y_test, y_pred):.4f}")2. 决策树(Decision Tree)
决策树是一种直观的分类和回归算法,通过一系列”if-else”规则对数据进行划分。它的最大优势是可解释性极强——你可以清晰地看到模型是如何做出每个决策的。决策树在医疗诊断、信用评估等需要解释性的场景中非常有用。但决策树也容易过拟合,实际使用中常配合剪枝或使用集成方法(如随机森林、XGBoost)来提高泛化能力。
3. K近邻算法(KNN)
KNN 是一种基于实例的学习算法,核心思想非常朴素:找到与待预测样本最接近的 K 个训练样本,用它们的标签进行投票(分类)或取平均(回归)。KNN 的优点是简单直观,不需要训练过程;缺点是在大数据集上预测速度慢,且对特征的尺度敏感,使用前需要进行特征归一化。
K 值的选择对 KNN 的性能影响很大。K 值过小容易受噪声影响,K 值过大则会导致决策边界过于平滑。通常通过交叉验证来选择最优的 K 值。距离度量方式(欧氏距离、曼哈顿距离等)也是需要考虑的因素。
二、无监督学习算法
无监督学习处理的是没有标签的数据,目标是发现数据中隐藏的结构和模式。
1. K-Means 聚类
K-Means 是最常用的聚类算法之一。它的流程很简单:首先随机初始化 K 个聚类中心,然后将每个数据点分配到最近的中心,接着重新计算每个簇的中心,不断迭代直到收敛。K-Means 的优点是算法简单、计算高效,缺点是需要预先指定 K 值,且对初始中心的选择敏感,容易陷入局部最优。
from sklearn.cluster import KMeans
# 创建模型并聚类kmeans = KMeans(n_clusters=3, random_state=42)labels = kmeans.fit_predict(X)
# 获取聚类中心centers = kmeans.cluster_centers_确定最佳 K 值的常用方法是”肘部法则”——绘制不同 K 值对应的惯性值(inertia),选择曲线的”拐点”作为最佳 K 值。
2. 主成分分析(PCA)
PCA 是一种常用的降维技术,通过线性变换将高维数据投影到低维空间,同时尽可能保留原始数据的方差信息。PCA 在数据预处理、特征提取和数据可视化中非常有用。例如,你可以将高维数据降到 2 维或 3 维,然后用散点图直观地观察数据的分布和聚类效果。
PCA 的核心思想是找到数据方差最大的方向(即主成分),这些方向捕捉了数据中最重要的信息。第一个主成分解释了最大的方差,第二个主成分解释了次大的方差,以此类推。通常可以选择累计方差贡献率达到 85%~95% 的主成分数量。
三、模型评估指标
训练完模型后,如何评估它的性能?对于不同的任务,我们需要使用不同的评估指标。
分类任务的评估指标
**准确率(Accuracy)**是最直观的指标,表示正确预测的样本占总样本的比例。但在数据不均衡的情况下,准确率可能产生误导。例如,如果 99% 的样本都是正类,一个永远预测正类的模型也能获得 99% 的准确率。
**精确率(Precision)**表示预测为正类的样本中实际为正类的比例。在垃圾邮件过滤等场景中,我们更关心精确率——因为误判正常邮件为垃圾邮件的代价很高。
**召回率(Recall)**表示实际为正类的样本中被正确预测的比例。在疾病筛查等场景中,我们更关心召回率——因为漏掉一个患者比误诊的代价更高。
**F1分数(F1 Score)**是精确率和召回率的调和平均数,综合考虑了两者的表现。当精确率和召回率都很重要且需要平衡时,F1 是最好的选择。
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
print(f"准确率: {accuracy_score(y_test, y_pred):.4f}")print(f"精确率: {precision_score(y_test, y_pred):.4f}")print(f"召回率: {recall_score(y_test, y_pred):.4f}")print(f"F1分数: {f1_score(y_test, y_pred):.4f}")四、scikit-learn 实战要点
scikit-learn 是 Python 中最流行的机器学习库,提供了统一、简洁的 API 接口。几乎所有的算法都遵循相同的使用模式:创建模型 → 调用 fit() 训练 → 调用 predict() 预测。
使用 scikit-learn 时有几个重要的注意事项:第一,务必进行数据预处理,包括特征缩放、缺失值处理和编码转换。第二,使用交叉验证(cross_val_score)来评估模型,而不是简单地划分训练集和测试集。第三,注意过拟合问题,可以通过正则化、Dropout 或增加训练数据来缓解。第四,使用 GridSearchCV 或 RandomizedSearchCV 进行超参数调优,找到模型的最佳参数组合。
总结
机器学习的算法远不止这些,深度学习、强化学习等领域还有更多强大的方法。但作为入门,掌握上述几种经典算法已经足够应对大部分场景。关键不在于记住算法的每一个细节,而在于理解它们的适用场景、优缺点,以及如何在实际项目中灵活运用。
建议的学习路径:先理解数学原理,再用 scikit-learn 实现,最后尝试从零实现简单的版本。理论与实践相结合,才能真正掌握机器学习的精髓。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时





