在进行数据迷信时,可能会节约大量工夫编码并期待计算机运行某些货色。所以我抉择了一些 Python 库,能够帮忙你节俭贵重的工夫。
1、Optuna
Optuna 是一个开源的超参数优化框架,它能够主动为机器学习模型找到最佳超参数。
最根本的(也可能是家喻户晓的)代替计划是 sklearn 的 GridSearchCV,它将尝试多种超参数组合并依据穿插验证抉择最佳组合。
GridSearchCV 将在先前定义的空间内尝试组合。例如,对于随机森林分类器,可能想要测试几个不同的树的最大深度。GridSearchCV 会提供每个超参数的所有可能值,并查看所有组合。
Optuna 会在定义的搜寻空间中应用本人尝试的历史来确定接下来要尝试的值。它应用的办法是一种称为“Tree-structured Parzen Estimator”的贝叶斯优化算法。
这种不同的办法意味着它不是无意义的地尝试每一个值,而是在尝试之前寻找最佳候选者,这样能够节省时间,否则这些工夫会花在尝试没有心愿的替代品上(并且可能也会产生更好的后果)。
最初,它与框架无关,这意味着您能够将它与 TensorFlow、Keras、PyTorch 或任何其余 ML 框架一起应用。
2、ITMO_FS
ITMO_FS 是一个特征选择库,它能够为 ML 模型进行特征选择。领有的察看值越少,就越须要审慎解决过多的特色,以防止适度拟合。所谓“审慎”意思是应该标准你的模型。通常一个更简略的模型(更少的特色),更容易了解和解释。
ITMO_FS 算法分为 6 个不同的类别:监督过滤器、无监督过滤器、包装器、混合、嵌入式、集成(只管它次要关注监督过滤器)。
“监督过滤器”算法的一个简略示例是依据特色与指标变量的相关性来抉择特色。“backward selection”,能够尝试一一删除特色,并确认这些特色如何影响模型预测能力。
这是一个对于如何应用 ITMO_FS 及其对模型分数的影响的一般示例:
>>> from sklearn.linear_model import SGDClassifier
>>> from ITMO_FS.embedded import MOS
>>> X, y = make_classification(n_samples=300, n_features=10, random_state=0, n_informative=2)
>>> sel = MOS()
>>> trX = sel.fit_transform(X, y, smote=False)
>>> cl1 = SGDClassifier()
>>> cl1.fit(X, y)
>>> cl1.score(X, y)
0.9033333333333333
>>> cl2 = SGDClassifier()
>>> cl2.fit(trX, y)
>>> cl2.score(trX, y)
0.9433333333333334
ITMO_FS 是一个绝对较新的库,因而它依然有点不稳固,但我依然倡议尝试一下。
3、shap-hypetune
到目前为止,咱们曾经看到了用于特征选择和超参数调整的库,但为什么不能同时应用两者呢?这就是 shap-hypetune 的作用。
让咱们从理解什么是“SHAP”开始:
“SHAP(SHapley Additive exPlanations)是一种博弈论办法,用于解释任何机器学习模型的输入。”
SHAP 是用于解释模型的最宽泛应用的库之一,它通过产生每个特色对模型最终预测的重要性来工作。
另一方面,shap-hypertune 受害于这种办法来抉择最佳特色,同时也抉择最佳超参数。你为什么要合并在一起?因为没有思考它们之间的相互作用,独立地抉择特色和调整超参数可能会导致次优抉择。同时执行这两项不仅思考到了这一点,而且还节俭了一些编码工夫(只管因为搜寻空间的减少可能会减少运行工夫)。
搜寻能够通过 3 种形式实现:网格搜寻、随机搜寻或贝叶斯搜寻(另外,它能够并行化)。
然而,shap-hypertune 仅实用于梯度晋升模型!
4、PyCaret
PyCaret 是一个开源、低代码的机器学习库,可主动执行机器学习工作流。它涵盖探索性数据分析、预处理、建模(包含可解释性)和 MLOps。
让咱们看看他们网站上的一些理论示例,看看它是如何工作的:
# load dataset
from pycaret.datasets import get_data
diabetes = get_data('diabetes')
# init setup
from pycaret.classification import *
clf1 = setup(data = diabetes, target = 'Class variable')
# compare models
best = compare_models()
只需几行代码,就能够尝试多个模型,并在整个次要分类指标中对它们进行了比拟。
它还容许创立一个根本的应用程序来与模型进行交互:
from pycaret.datasets import get_data
juice = get_data('juice')
from pycaret.classification import *
exp_name = setup(data = juice, target = 'Purchase')
lr = create_model('lr')
create_app(lr)
最初,能够轻松地为模型创立 API 和 Docker 文件:
from pycaret.datasets import get_data
juice = get_data('juice')
from pycaret.classification import *
exp_name = setup(data = juice, target = 'Purchase')
lr = create_model('lr')
create_api(lr, 'lr_api')
create_docker('lr_api')
没有比这更容易的了,对吧?
PyCaret 是一个十分残缺的库,在这里很难涵盖所有内容,倡议你当初下载并开始应用它来理解一些 其在实践中的能力。
5、floWeaver
FloWeaver 能够从流数据集中生成桑基图。如果你不晓得什么是桑基图,这里有一个例子:
在显示转化漏斗、营销旅程或估算调配的数据时,它们十分有用(上例)。入口数据应采纳以下格局:“源 x 指标 x 值”,只需一行代码即可创立此类图(十分具体,但也十分直观)。
6、Gradio
如果你浏览过麻利数据迷信,就会晓得领有一个让最终用户从我的项目开始就与数据进行交互的前端界面是如许有帮忙。个别状况下在 Python 中最罕用是 Flask,但它对初学者不太敌对,它须要多个文件和一些 html、css 等常识。
Gradio 容许您通过设置输出类型(文本、复选框等)、性能和输入来创立简略的界面。只管它仿佛不如 Flask 可定制,但它更直观。
因为 Gradio 当初曾经退出 Huggingface,能够在互联网上永恒托管 Gradio 模型,而且是收费的!
7、Terality
了解 Terality 的最佳形式是将其视为“Pandas,但速度更快”。这并不意味着齐全替换 pandas 并且必须重新学习如何应用 df:Terality 与 Pandas 具备完全相同的语法。实际上,他们甚至倡议“import Terality as pd”,并持续依照以前的习惯的形式进行编码。
它快多少?他们的网站有时会说它快 30 倍,有时快 10 到 100 倍。
另一个重要是 Terality 容许并行化并且它不在本地运行,这意味着您的 8GB RAM 笔记本电脑将不会再呈现 MemoryErrors!
但它在背地是如何运作的呢?了解 Terality 的一个很好的比喻是能够认为他们在本地应用的 Pandas 兼容的语法并编译成 Spark 的计算操作,应用 Spark 进行后端的计算。所以计算不是在本地运行,而是将计算工作提交到了他们的平台上。
那有什么问题呢?每月最多只能收费解决 1TB 的数据。如果须要更多则必须每月至多领取 49 美元。1TB/ 月对于测试工具和集体我的项目可能入不敷出,但如果你须要它来理论公司应用,必定是要付费的。
8、torch-handle
如果你是 Pytorch 的使用者,能够试试这个库。
torchhandle 是一个 PyTorch 的辅助框架。它将 PyTorch 繁琐和反复的训练代码形象进去,使得数据科学家们可能将精力放在数据处理、创立模型和参数优化,而不是编写反复的训练循环代码。应用 torchhandle,能够让你的代码更加简洁易读,让你的开发工作更加高效。
torchhandle 将 Pytorch 的训练和推理过程进行了形象整顿和提取,只有应用几行代码就能够实现 PyTorch 的深度学习管道。并能够生成残缺训练报告,还能够集成 tensorboard 进行可视化。
from collections import OrderedDict
import torch
from torchhandle.workflow import BaseContext
class Net(torch.nn.Module):
def __init__(self,):
super().__init__()
self.layer = torch.nn.Sequential(OrderedDict([('l1', torch.nn.Linear(10, 20)),
('a1', torch.nn.ReLU()),
('l2', torch.nn.Linear(20, 10)),
('a2', torch.nn.ReLU()),
('l3', torch.nn.Linear(10, 1))
]))
def forward(self, x):
x = self.layer(x)
return x
num_samples, num_features = int(1e4), int(1e1)
X, Y = torch.rand(num_samples, num_features), torch.rand(num_samples)
dataset = torch.utils.data.TensorDataset(X, Y)
trn_loader = torch.utils.data.DataLoader(dataset, batch_size=64, num_workers=0, shuffle=True)
loaders = {"train": trn_loader, "valid": trn_loader}
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model = {"fn": Net}
criterion = {"fn": torch.nn.MSELoss}
optimizer = {"fn": torch.optim.Adam,
"args": {"lr": 0.1},
"params": {"layer.l1.weight": {"lr": 0.01},
"layer.l1.bias": {"lr": 0.02}}
}
scheduler = {"fn": torch.optim.lr_scheduler.StepLR,
"args": {"step_size": 2, "gamma": 0.9}
}
c = BaseContext(model=model,
criterion=criterion,
optimizer=optimizer,
scheduler=scheduler,
context_tag="ex01")
train = c.make_train_session(device, dataloader=loaders)
train.train(epochs=10)
定义一个模型,设置数据集,配置优化器、损失函数就能够主动训练了,是不是和 TF 差不多了。
https://www.overfit.cn/post/c333c3f3a2b2409dae03fea56c1daae3
作者:Arthur Mello