百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

面向初学者的 10 条实用机器学习技巧

itomcoil 2024-12-28 13:35 28 浏览

这 10 条建议让你省去很多麻烦。它们专注于实践,而不仅仅是理论。为了使其实用,我将向您展示如何使用UCI 机器学习存储库中的真实数据集来构建和训练您的第一个模型。

让我们开始吧。

1.从简单开始:先建立小模型

暂时忘掉深度学习吧。从小型、简单的模型开始至关重要。如果你不能解释线性回归或决策树,你就还没准备好学习神经网络。这些简单的模型对于小型数据集非常有效,并为理解基础知识奠定了坚实的基础。

示例:使用线性回归预测房价

我们正在使用波士顿住房数据集。目标是根据犯罪率、房间数量和税率等特征预测房价。

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# Load dataset
url = "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 data
X = 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 Regression
model = LinearRegression()
model.fit(X_train, y_train)

# Evaluate
y_pred = model.predict(X_test)
print(f"Mean Squared Error: {mean_squared_error(y_test, y_pred):.2f}")

这里发生了什么?

  1. 我们加载住房数据集(无多余内容)。
  2. 将其分成训练数据集和测试数据集(80/20)。
  3. 训练线性回归模型来预测价格。
  4. 使用均方误差(MSE)进行评估。

结果如何? 你可以在 5 分钟内解释这个基本模型。

2. 在训练模型之前了解你的数据

原始数据中充满了故事。不要跳过探索数据集、可视化关系和识别可能破坏模型性能的奇怪异常值的步骤。

示例:探索葡萄酒数据集中的关系

我们使用的是葡萄酒数据集。该数据集根据 13 个特征将葡萄酒分为三类。

import seaborn as sns
import matplotlib.pyplot as plt
# Load the Wine Dataset
url = "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 relationships
sns.pairplot(data, hue="Class", diag_kind="kde")
plt.show()

这里发生了什么?

  1. 该数据集有 3 个葡萄酒类别和 13 个数值特征。
  2. 配对图可视化了特征之间的关系。
  3. 您很快就会看到哪些特点区分了葡萄酒类别(一些模式会脱颖而出)。

关键见解:机器学习首先是理解数据,而不是模型。

3.清理和预处理数据

请记住,脏数据等于坏模型。你的算法不是读心者。缺失值、非数字数据和不一致的比例都会对你的结果产生负面影响。因此,在训练模型之前,请清理和预处理你的数据。

示例:清理乳腺癌数据集

乳腺癌数据集包含一些以?表示的无效条目。

import numpy as np
# Load the dataset
url = "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 NaN
data.replace("?", np.nan, inplace=True)
# Drop rows with missing values
data = data.dropna()
print(data.head())

这里发生了什么?

  1. 用 NaN 替换无效条目(?)。
  2. 删除缺少值的行。
  3. 清理后的数据已准备好进行模型训练。

教训:垃圾进,垃圾出。清理你的数据。

4. 在做其他事情之前先拆分数据

如果你用训练模型时所用的数据来评估模型,那你就是在自欺欺人!将数据分成训练数据集和测试数据集。

示例:训练-测试拆分

from sklearn.model_selection import train_test_split
X_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 StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

6. 交叉验证:以正确的方式测试你的模型

单一的训练测试分割是不够的。使用交叉验证在多个数据上测试您的模型。我们将在这里使用不同的数据集。这是来自 UCI ML 的钞票认证数据集。您会注意到交叉验证准确率与准确率有何不同。更低!使用较低的一个。如果您的准确率给您更高的百分比,并且您使用它,那么您就错了!

示例:使用随机森林进行交叉验证

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score
model = 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_classif
X_new = SelectKBest(f_classif, k=3).fit_transform(X, y)
print(f"Selected Features Shape: {X_new.shape}")

8. 正则化以避免过度拟合

当你的模型在训练数据上表现良好但在未知数据上表现不佳时,就会发生过度拟合。正则化有助于解决这个问题。

示例:Ridge Regression

from sklearn.linear_model import Ridge
ridge = Ridge(alpha=1.0)
ridge.fit(X_train_scaled, y_train)
print(f"Model Coefficients: {ridge.coef_}")

9.调整超参数

模型具有需要调整的设置(超参数)以获得更好的结果。使用网格搜索找到最佳设置。

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
params = {'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_report
y_pred = model.predict(X_test_scaled)
print("Classification Report:")
print(classification_report(y_test, y_pred))

相关推荐

selenium(WEB自动化工具)

定义解释Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7,8,9,10,11),MozillaF...

开发利器丨如何使用ELK设计微服务中的日志收集方案?

【摘要】微服务各个组件的相关实践会涉及到工具,本文将会介绍微服务日常开发的一些利器,这些工具帮助我们构建更加健壮的微服务系统,并帮助排查解决微服务系统中的问题与性能瓶颈等。我们将重点介绍微服务架构中...

高并发系统设计:应对每秒数万QPS的架构策略

当面试官问及"如何应对每秒几万QPS(QueriesPerSecond)"时,大概率是想知道你对高并发系统设计的理解有多少。本文将深入探讨从基础设施到应用层面的解决方案。01、理解...

2025 年每个 JavaScript 开发者都应该了解的功能

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发。1.Iteratorhelpers开发者...

JavaScript Array 对象

Array对象Array对象用于在变量中存储多个值:varcars=["Saab","Volvo","BMW"];第一个数组元素的索引值为0,第二个索引值为1,以此类推。更多有...

Gemini 2.5编程全球霸榜,谷歌重回AI王座,神秘模型曝光,奥特曼迎战

刚刚,Gemini2.5Pro编程登顶,6美元性价比碾压Claude3.7Sonnet。不仅如此,谷歌还暗藏着更强的编程模型Dragontail,这次是要彻底翻盘了。谷歌,彻底打了一场漂亮的翻...

动力节点最新JavaScript教程(高级篇),深入学习JavaScript

JavaScript是一种运行在浏览器中的解释型编程语言,它的解释器被称为JavaScript引擎,是浏览器的一部分,JavaScript广泛用于浏览器客户端编程,通常JavaScript脚本是通过嵌...

一文看懂Kiro,其 Spec工作流秒杀Cursor,可移植至Claude Code

当Cursor的“即兴编程”开始拖累项目质量,AWS新晋IDEKiro以Spec工作流打出“先规范后编码”的系统工程思维:需求-设计-任务三件套一次生成,文档与代码同步落地,复杂项目不...

「晚安·好梦」努力只能及格,拼命才能优秀

欢迎光临,浏览之前点击上面的音乐放松一下心情吧!喜欢的话给小编一个关注呀!Effortscanonlypass,anddesperatelycanbeexcellent.努力只能及格...

JavaScript 中 some 与 every 方法的区别是什么?

大家好,很高兴又见面了,我是姜茶的编程笔记,我们一起学习前端相关领域技术,共同进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力在JavaScript中,Array.protot...

10个高效的Python爬虫框架,你用过几个?

小型爬虫需求,requests库+bs4库就能解决;大型爬虫数据,尤其涉及异步抓取、内容管理及后续扩展等功能时,就需要用到爬虫框架了。下面介绍了10个爬虫框架,大家可以学习使用!1.Scrapysc...

12个高效的Python爬虫框架,你用过几个?

实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实...

pip3 install pyspider报错问题解决

运行如下命令报错:>>>pip3installpyspider观察上面的报错问题,需要安装pycurl。是到这个网址:http://www.lfd.uci.edu/~gohlke...

PySpider框架的使用

PysiderPysider是一个国人用Python编写的、带有强大的WebUI的网络爬虫系统,它支持多种数据库、任务监控、项目管理、结果查看、URL去重等强大的功能。安装pip3inst...

「机器学习」神经网络的激活函数、并通过python实现激活函数

神经网络的激活函数、并通过python实现whatis激活函数感知机的网络结构如下:左图中,偏置b没有被画出来,如果要表示出b,可以像右图那样做。用数学式来表示感知机:上面这个数学式子可以被改写:...