这 10 条建议让你省去很多麻烦。它们专注于实践,而不仅仅是理论。为了使其实用,我将向您展示如何使用UCI 机器学习存储库中的真实数据集来构建和训练您的第一个模型。
让我们开始吧。
1.从简单开始:先建立小模型
暂时忘掉深度学习吧。从小型、简单的模型开始至关重要。如果你不能解释线性回归或决策树,你就还没准备好学习神经网络。这些简单的模型对于小型数据集非常有效,并为理解基础知识奠定了坚实的基础。
示例:使用线性回归预测房价
我们正在使用波士顿住房数据集。目标是根据犯罪率、房间数量和税率等特征预测房价。
from sklearn.linear_model import LinearRegressionfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import mean_squared_errorimport pandas as pdimport seaborn as snsimport matplotlib.pyplot as plt# Load dataseturl = "https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data"columns = ["CRIM", "ZN", "INDUS", "CHAS", "NOX", "RM", "AGE", "DIS", "RAD", "TAX", "PTRATIO", "B", "LSTAT", "MEDV"]data = pd.read_csv(url, sep='\s+', names=columns)# Split dataX = data.drop(columns=["MEDV"])y = data["MEDV"]X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# Train Linear Regressionmodel = LinearRegression()model.fit(X_train, y_train)# Evaluatey_pred = model.predict(X_test)print(f"Mean Squared Error: {mean_squared_error(y_test, y_pred):.2f}")
作者生成的均方误差 (MSE) 图像
这里发生了什么?
- 我们加载住房数据集(无多余内容)。
- 将其分成训练数据集和测试数据集(80/20)。
- 训练线性回归模型来预测价格。
- 使用均方误差(MSE)进行评估。
结果如何? 你可以在 5 分钟内解释这个基本模型。
2. 在训练模型之前了解你的数据
原始数据中充满了故事。不要跳过探索数据集、可视化关系和识别可能破坏模型性能的奇怪异常值的步骤。
示例:探索葡萄酒数据集中的关系
我们使用的是葡萄酒数据集。该数据集根据 13 个特征将葡萄酒分为三类。
import seaborn as snsimport matplotlib.pyplot as plt# Load the Wine Dataseturl = "https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data"columns = ["Class"] + [f"Feature_{i}" for i in range(1, 14)]data = pd.read_csv(url, header=None, names=columns)# Visualize relationshipssns.pairplot(data, hue="Class", diag_kind="kde")plt.show()
作者生成的用于机器学习探索性分析步骤的配对图可视化图像
这里发生了什么?
- 该数据集有 3 个葡萄酒类别和 13 个数值特征。
- 配对图可视化了特征之间的关系。
- 您很快就会看到哪些特点区分了葡萄酒类别(一些模式会脱颖而出)。
关键见解:机器学习首先是理解数据,而不是模型。
3.清理和预处理数据
请记住,脏数据等于坏模型。你的算法不是读心者。缺失值、非数字数据和不一致的比例都会对你的结果产生负面影响。因此,在训练模型之前,请清理和预处理你的数据。
示例:清理乳腺癌数据集
乳腺癌数据集包含一些以?表示的无效条目。
import numpy as np# Load the dataseturl = "https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data"data = pd.read_csv(url, header=None)# Replace '?' with NaNdata.replace("?", np.nan, inplace=True)# Drop rows with missing valuesdata = data.dropna()print(data.head())
作者生成的机器学习探索性分析步骤后缺失值处理图像
这里发生了什么?
- 用 NaN 替换无效条目(?)。
- 删除缺少值的行。
- 清理后的数据已准备好进行模型训练。
教训:垃圾进,垃圾出。清理你的数据。
4. 在做其他事情之前先拆分数据
如果你用训练模型时所用的数据来评估模型,那你就是在自欺欺人!将数据分成训练数据集和测试数据集。
示例:训练-测试拆分
from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)print(f"Train size: {X_train.shape}, Test size: {X_test.shape}")
作者生成的机器学习中训练和测试数据大小图像
为什么重要:在未知数据上测试模型可以模拟真实世界的性能。
5. 训练之前扩展数据
机器学习模型不知道“年龄”和“收入”的衡量标准不同。缩放特征,使所有值都具有同等重要性。
示例:标准化特征
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()X_train_scaled = scaler.fit_transform(X_train)X_test_scaled = scaler.transform(X_test)6. 交叉验证:以正确的方式测试你的模型
单一的训练测试分割是不够的。使用交叉验证在多个数据上测试您的模型。我们将在这里使用不同的数据集。这是来自 UCI ML 的钞票认证数据集。您会注意到交叉验证准确率与准确率有何不同。更低!使用较低的一个。如果您的准确率给您更高的百分比,并且您使用它,那么您就错了!
示例:使用随机森林进行交叉验证
from sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import cross_val_scoremodel = RandomForestClassifier()scores = cross_val_score(model, X, y, cv=5)print(f"Cross-Validation Accuracy: {scores.mean():.2f}")
作者创建的机器学习过程中的图像描绘准确度和交叉验证准确度
7. 选择正确的功能
并非所有特征都重要。使用特征选择技术来挑选最重要的特征。
from sklearn.feature_selection import SelectKBest, f_classifX_new = SelectKBest(f_classif, k=3).fit_transform(X, y)print(f"Selected Features Shape: {X_new.shape}")
作者绘制的描绘 3 个最重要特征的图像
8. 正则化以避免过度拟合
当你的模型在训练数据上表现良好但在未知数据上表现不佳时,就会发生过度拟合。正则化有助于解决这个问题。
示例:Ridge Regression
from sklearn.linear_model import Ridgeridge = Ridge(alpha=1.0)ridge.fit(X_train_scaled, y_train)print(f"Model Coefficients: {ridge.coef_}")
作者创建的机器学习 (ML) 问题中正则化后的模型系数图像
9.调整超参数
模型具有需要调整的设置(超参数)以获得更好的结果。使用网格搜索找到最佳设置。
from sklearn.model_selection import GridSearchCVfrom sklearn.svm import SVCparams = {'kernel': ['linear', 'rbf'], 'C': [0.1, 1, 10]}grid = GridSearchCV(SVC(), params, cv=5)grid.fit(X_train_scaled, y_train)print(f"Best Parameters: {grid.best_params_}")
作者绘制的超参数调整图像
10.用正确的指标评估你的模型
准确度还不够。查看准确率、召回率和 F1 分数等指标来衡量模型的性能。
from sklearn.metrics import classification_reporty_pred = model.predict(X_test_scaled)print("Classification Report:")print(classification_report(y_test, y_pred))
作者创建的描述模型性能评估指标的图像 |