【机器学习】初学者经典案例(随记)

avatar
作者
筋斗云
阅读量:1

🎈边走、边悟🎈迟早会好

一、概念

机器学习是一种利用数据来改进模型性能的计算方法,属于人工智能的一个分支。它旨在让计算机系统通过经验自动改进,而不需要明确编程。

类型

  1. 监督学习:使用带标签的数据进行训练,包括分类(如垃圾邮件检测)和回归(如房价预测)。
  2. 无监督学习:使用不带标签的数据进行训练,包括聚类(如客户细分)和降维(如主成分分析)。
  3. 强化学习:通过与环境的交互学习策略,以最大化累积奖励(如AlphaGo)。

二、 常见算法

2.1监督学习算法
  • 线性回归:用于回归任务,假设目标变量与输入特征之间存在线性关系。
  • 逻辑回归:用于二分类任务,输出一个介于0和1之间的概率。
  • 决策树:树状结构的模型,易于理解和解释。
  • 支持向量机(SVM):寻找能够最大化类间间隔的决策边界。
  • K近邻(KNN):基于距离度量的简单算法,预测时考虑最近的K个邻居。
  • 朴素贝叶斯:基于贝叶斯定理的分类算法,假设特征之间条件独立。
2.2无监督学习算法
  • K均值聚类:将数据分成K个簇,使得簇内数据的相似度最大。
  • 层次聚类:构建一个层次结构的聚类树,逐步合并或分割簇。
  • 主成分分析(PCA):将高维数据投影到低维空间,保留数据的主要变异信息。
  • 独立成分分析(ICA):类似于PCA,但假设数据成分相互独立。
2.3强化学习算法
  • Q学习:基于状态-动作对的值函数,通过Q值迭代更新策略。
  • 深度Q网络(DQN):结合深度学习的Q学习算法,用神经网络近似Q值。
  • 策略梯度方法:直接优化策略,使得期望奖励最大化。

三.、模型评估

评估指标
分类:

  • 准确率:正确预测的样本数占总样本数的比例。
  • 精确率:预测为正类的样本中实际为正类的比例。
  • 召回率:实际为正类的样本中被正确预测为正类的比例。
  • F1分数:精确率和召回率的调和平均数。
  • 混淆矩阵:总结预测结果的矩阵,显示真阳性、假阳性、真阴性和假阴性。

回归:

  • 均方误差(MSE):预测值与真实值之差的平方和的平均数。
  • 均方根误差(RMSE):MSE的平方根。
  • 平均绝对误差(MAE):预测值与真实值之差的绝对值的平均数。
  • R²:解释回归模型对数据变异的比例。

交叉验证
通过将数据集划分为若干子集,反复进行训练和验证,以评估模型的性能稳定性和泛化能力。

四、 优化技术

4.1 超参数优化
  • 网格搜索:对所有可能的参数组合进行穷举搜索,找到最佳参数组合。
  • 随机搜索:随机选择参数组合进行搜索,相对高效。
  • 贝叶斯优化:利用贝叶斯推理逐步优化参数选择过程。
4.2 正则化

通过在损失函数中添加正则项,防止过拟合:

  • L1正则化:加入参数的绝对值和(Lasso回归)。
  • L2正则化:加入参数的平方和(Ridge回归)。
4.3 特征选择

选择对模型性能影响较大的特征,去除冗余或相关性高的特征。

五、 常见问题及解决方法

5.1 过拟合与欠拟合
  • 过拟合:模型在训练集上表现良好,但在测试集上表现差。解决方法包括增加数据量、正则化、使用更简单的模型等。
  • 欠拟合:模型在训练集上和测试集上都表现不佳。解决方法包括增加模型复杂度、添加更多特征等。
5.2 数据不平衡

当某一类样本数量远多于其他类时,模型可能偏向于预测多数类。解决方法包括重采样、调整分类阈值、使用加权损失函数等。

 六、入门经典案例

1. 鸢尾花数据集分类(Iris Dataset Classification)
背景

        鸢尾花数据集是机器学习领域中非常经典的数据集,由英国统计学家和生物学家Fisher在1936年提出。该数据集包含150个样本,每个样本有4个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。目标是根据这些特征将鸢尾花分为三类:山鸢尾(Setosa)、变色鸢尾(Versicolor)和维吉尼亚鸢尾(Virginica)。

过程
  1. 数据预处理:加载数据并进行基本的清洗和探索性数据分析(EDA)。
  2. 特征选择:选择合适的特征来进行分类。
  3. 数据划分:将数据集分为训练集和测试集,一般采用80/20或70/30的比例。
  4. 模型选择:选择合适的分类算法,如K近邻(KNN)、支持向量机(SVM)、决策树(Decision Tree)等。
  5. 模型训练:在训练集上训练模型。
  6. 模型评估:在测试集上评估模型的性能,常用的评估指标包括准确率、混淆矩阵、F1分数等。
  7. 模型优化:根据评估结果进行参数调优或选择其他模型。
详解
# 示例代码(以KNN为例) from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score, classification_report, confusion_matrix  # 加载数据 iris = load_iris() X = iris.data y = iris.target  # 数据划分 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 模型训练 knn = KNeighborsClassifier(n_neighbors=3) knn.fit(X_train, y_train)  # 模型预测 y_pred = knn.predict(X_test)  # 模型评估 print("Accuracy:", accuracy_score(y_test, y_pred)) print("Confusion Matrix:\n", confusion_matrix(y_test, y_pred)) print("Classification Report:\n", classification_report(y_test, y_pred)) 
2. 房价预测(Housing Price Prediction)
背景

房价预测是回归问题的经典案例之一,通常使用波士顿房价数据集。该数据集包含506个数据点,每个数据点有13个特征(如房间数量、房龄、犯罪率等),目标是预测房屋的中位数价格。

过程
  1. 数据预处理:加载数据,处理缺失值和异常值,进行EDA。
  2. 特征工程:选择重要特征,并进行特征缩放。
  3. 数据划分:将数据集分为训练集和测试集。
  4. 模型选择:选择回归模型,如线性回归(Linear Regression)、随机森林回归(Random Forest Regression)等。
  5. 模型训练:在训练集上训练模型。
  6. 模型评估:在测试集上评估模型性能,常用评估指标包括均方误差(MSE)、均方根误差(RMSE)等。
  7. 模型优化:根据评估结果进行参数调优或选择其他模型。
详解
# 示例代码(以线性回归为例) from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error  # 加载数据 boston = load_boston() X = boston.data y = boston.target  # 数据划分 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 模型训练 lr = LinearRegression() lr.fit(X_train, y_train)  # 模型预测 y_pred = lr.predict(X_test)  # 模型评估 mse = mean_squared_error(y_test, y_pred) rmse = mse ** 0.5 print("MSE:", mse) print("RMSE:", rmse) 
3. 手写数字识别(Digit Recognition)
背景

手写数字识别是计算机视觉中的经典问题,通常使用MNIST数据集。该数据集包含60000个训练样本和10000个测试样本,每个样本是28x28像素的灰度图像,代表手写的数字0-9。

过程
  1. 数据预处理:加载数据,并进行基本的图像处理。
  2. 特征工程:将图像数据展平或进行特征提取。
  3. 数据划分:将数据集分为训练集和测试集。
  4. 模型选择:选择分类模型,如卷积神经网络(CNN)、支持向量机(SVM)等。
  5. 模型训练:在训练集上训练模型。
  6. 模型评估:在测试集上评估模型性能,常用评估指标包括准确率、混淆矩阵等。
  7. 模型优化:根据评估结果进行参数调优或选择其他模型。
详解
# 示例代码(以简单的多层感知机为例) from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Flatten from tensorflow.keras.utils import to_categorical  # 加载数据 (X_train, y_train), (X_test, y_test) = mnist.load_data()  # 数据预处理 X_train = X_train.reshape(-1, 28*28).astype('float32') / 255.0 X_test = X_test.reshape(-1, 28*28).astype('float32') / 255.0 y_train = to_categorical(y_train, 10) y_test = to_categorical(y_test, 10)  # 构建模型 model = Sequential([     Flatten(input_shape=(28*28,)),     Dense(128, activation='relu'),     Dense(64, activation='relu'),     Dense(10, activation='softmax') ])  # 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])  # 训练模型 model.fit(X_train, y_train, epochs=10, batch_size=32, validation_split=0.2)  # 评估模型 loss, accuracy = model.evaluate(X_test, y_test) print("Loss:", loss) print("Accuracy:", accuracy) 

 🌟感谢支持 听忆.-CSDN博客

🎈众口难调🎈从心就好

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!