面向初学者的 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}")
这里发生了什么?
- 我们加载住房数据集(无多余内容)。
- 将其分成训练数据集和测试数据集(80/20)。
- 训练线性回归模型来预测价格。
- 使用均方误差(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()
这里发生了什么?
- 该数据集有 3 个葡萄酒类别和 13 个数值特征。
- 配对图可视化了特征之间的关系。
- 您很快就会看到哪些特点区分了葡萄酒类别(一些模式会脱颖而出)。
关键见解:机器学习首先是理解数据,而不是模型。
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())
这里发生了什么?
- 用 NaN 替换无效条目(?)。
- 删除缺少值的行。
- 清理后的数据已准备好进行模型训练。
教训:垃圾进,垃圾出。清理你的数据。
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,可以像右图那样做。用数学式来表示感知机:上面这个数学式子可以被改写:...
- 一周热门
- 最近发表
- 标签列表
-
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)
- shutil.copy() (33)