溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

有哪些提高數(shù)據(jù)科學(xué)工作效率并節(jié)省時(shí)間的Python庫

發(fā)布時(shí)間:2023-04-13 09:59:19 來源:億速云 閱讀:115 作者:iii 欄目:編程語言

本文小編為大家詳細(xì)介紹“有哪些提高數(shù)據(jù)科學(xué)工作效率并節(jié)省時(shí)間的Python庫”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“有哪些提高數(shù)據(jù)科學(xué)工作效率并節(jié)省時(shí)間的Python庫”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

1、Optuna

Optuna 是一個(gè)開源的超參數(shù)優(yōu)化框架,它可以自動(dòng)為機(jī)器學(xué)習(xí)模型找到最佳超參數(shù)。

最基本的(也可能是眾所周知的)替代方案是 sklearn 的 GridSearchCV,它將嘗試多種超參數(shù)組合并根據(jù)交叉驗(yàn)證選擇最佳組合。

GridSearchCV 將在先前定義的空間內(nèi)嘗試組合。例如,對(duì)于隨機(jī)森林分類器,可能想要測(cè)試幾個(gè)不同的樹的最大深度。 GridSearchCV 會(huì)提供每個(gè)超參數(shù)的所有可能值,并查看所有組合。

Optuna會(huì)在定義的搜索空間中使用自己嘗試的歷史來確定接下來要嘗試的值。它使用的方法是一種稱為“Tree-structured Parzen Estimator”的貝葉斯優(yōu)化算法。

這種不同的方法意味著它不是無意義的地嘗試每一個(gè)值,而是在嘗試之前尋找最佳候選者,這樣可以節(jié)省時(shí)間,否則這些時(shí)間會(huì)花在嘗試沒有希望的替代品上(并且可能也會(huì)產(chǎn)生更好的結(jié)果)。

最后,它與框架無關(guān),這意味著您可以將它與 TensorFlow、Keras、PyTorch 或任何其他 ML 框架一起使用。

2、ITMO_FS

ITMO_FS 是一個(gè)特征選擇庫,它可以為 ML 模型進(jìn)行特征選擇。擁有的觀察值越少,就越需要謹(jǐn)慎處理過多的特征,以避免過度擬合。所謂“謹(jǐn)慎”意思是應(yīng)該規(guī)范你的模型。通常一個(gè)更簡(jiǎn)單的模型(更少的特征),更容易理解和解釋。

ITMO_FS 算法分為 6 個(gè)不同的類別:監(jiān)督過濾器、無監(jiān)督過濾器、包裝器、混合、嵌入式、集成(盡管它主要關(guān)注監(jiān)督過濾器)。

“監(jiān)督過濾器”算法的一個(gè)簡(jiǎn)單示例是根據(jù)特征與目標(biāo)變量的相關(guān)性來選擇特征?!癰ackward selection”,可以嘗試逐個(gè)刪除特征,并確認(rèn)這些特征如何影響模型預(yù)測(cè)能力。

這是一個(gè)關(guān)于如何使用 ITMO_FS 及其對(duì)模型分?jǐn)?shù)的影響的普通示例:

>>> 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是一個(gè)相對(duì)較新的庫,因此它仍然有點(diǎn)不穩(wěn)定,但我仍然建議嘗試一下。

3、shap-hypetune

到目前為止,我們已經(jīng)看到了用于特征選擇和超參數(shù)調(diào)整的庫,但為什么不能同時(shí)使用兩者呢?這就是 shap-hypetune 的作用。

讓我們從了解什么是“SHAP”開始:

“SHAP(SHapley Additive exPlanations)是一種博弈論方法,用于解釋任何機(jī)器學(xué)習(xí)模型的輸出。”

SHAP 是用于解釋模型的最廣泛使用的庫之一,它通過產(chǎn)生每個(gè)特征對(duì)模型最終預(yù)測(cè)的重要性來工作。

另一方面,shap-hypertune 受益于這種方法來選擇最佳特征,同時(shí)也選擇最佳超參數(shù)。你為什么要合并在一起?因?yàn)闆]有考慮它們之間的相互作用,獨(dú)立地選擇特征和調(diào)整超參數(shù)可能會(huì)導(dǎo)致次優(yōu)選擇。同時(shí)執(zhí)行這兩項(xiàng)不僅考慮到了這一點(diǎn),而且還節(jié)省了一些編碼時(shí)間(盡管由于搜索空間的增加可能會(huì)增加運(yùn)行時(shí)間)。

搜索可以通過 3 種方式完成:網(wǎng)格搜索、隨機(jī)搜索或貝葉斯搜索(另外,它可以并行化)。

但是,shap-hypertune 僅適用于梯度提升模型!

4、PyCaret

PyCaret 是一個(gè)開源、低代碼的機(jī)器學(xué)習(xí)庫,可自動(dòng)執(zhí)行機(jī)器學(xué)習(xí)工作流。 它涵蓋探索性數(shù)據(jù)分析、預(yù)處理、建模(包括可解釋性)和 MLOps。

讓我們看看他們網(wǎng)站上的一些實(shí)際示例,看看它是如何工作的:

# 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()

有哪些提高數(shù)據(jù)科學(xué)工作效率并節(jié)省時(shí)間的Python庫

只需幾行代碼,就可以嘗試多個(gè)模型,并在整個(gè)主要分類指標(biāo)中對(duì)它們進(jìn)行了比較。

它還允許創(chuàng)建一個(gè)基本的應(yīng)用程序來與模型進(jìn)行交互:

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)

最后,可以輕松地為模型創(chuàng)建 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')

沒有比這更容易的了,對(duì)吧?

PyCaret是一個(gè)非常完整的庫,在這里很難涵蓋所有內(nèi)容,建議你現(xiàn)在下載并開始使用它來了解一些 其在實(shí)踐中的能力。

5、floWeaver

FloWeaver 可以從流數(shù)據(jù)集中生成桑基圖。 如果你不知道什么是?;鶊D,這里有一個(gè)例子:

有哪些提高數(shù)據(jù)科學(xué)工作效率并節(jié)省時(shí)間的Python庫

在顯示轉(zhuǎn)化漏斗、營(yíng)銷旅程或預(yù)算分配的數(shù)據(jù)時(shí),它們非常有用(上例)。 入口數(shù)據(jù)應(yīng)采用以下格式:“源 x 目標(biāo) x 值”,只需一行代碼即可創(chuàng)建此類圖(非常具體,但也非常直觀)。

6、Gradio

如果你閱讀過敏捷數(shù)據(jù)科學(xué),就會(huì)知道擁有一個(gè)讓最終用戶從項(xiàng)目開始就與數(shù)據(jù)進(jìn)行交互的前端界面是多么有幫助。一般情況下在Python中最常用是 Flask,但它對(duì)初學(xué)者不太友好,它需要多個(gè)文件和一些 html、css 等知識(shí)。

Gradio 允許您通過設(shè)置輸入類型(文本、復(fù)選框等)、功能和輸出來創(chuàng)建簡(jiǎn)單的界面。 盡管它似乎不如 Flask 可定制,但它更直觀。

由于 Gradio 現(xiàn)在已經(jīng)加入 Huggingface,可以在互聯(lián)網(wǎng)上永久托管 Gradio 模型,而且是免費(fèi)的!

7、Terality

理解 Terality 的最佳方式是將其視為“Pandas ,但速度更快”。這并不意味著完全替換 pandas 并且必須重新學(xué)習(xí)如何使用df:Terality 與 Pandas 具有完全相同的語法。實(shí)際上,他們甚至建議“import Terality as pd”,并繼續(xù)按照以前的習(xí)慣的方式進(jìn)行編碼。

它快多少?他們的網(wǎng)站有時(shí)會(huì)說它快 30 倍,有時(shí)快 10 到 100 倍。

另一個(gè)重要是 Terality 允許并行化并且它不在本地運(yùn)行,這意味著您的 8GB RAM 筆記本電腦將不會(huì)再出現(xiàn) MemoryErrors!

但它在背后是如何運(yùn)作的呢?理解 Terality 的一個(gè)很好的比喻是可以認(rèn)為他們?cè)诒镜厥褂玫?Pandas 兼容的語法并編譯成 Spark 的計(jì)算操作,使用Spark進(jìn)行后端的計(jì)算。所以計(jì)算不是在本地運(yùn)行,而是將計(jì)算任務(wù)提交到了他們的平臺(tái)上。

那有什么問題呢?每月最多只能免費(fèi)處理 1TB 的數(shù)據(jù)。如果需要更多則必須每月至少支付 49 美元。 1TB/月對(duì)于測(cè)試工具和個(gè)人項(xiàng)目可能綽綽有余,但如果你需要它來實(shí)際公司使用,肯定是要付費(fèi)的。

8、torch-handle

如果你是Pytorch的使用者,可以試試這個(gè)庫。

torchhandle是一個(gè)PyTorch的輔助框架。 它將PyTorch繁瑣和重復(fù)的訓(xùn)練代碼抽象出來,使得數(shù)據(jù)科學(xué)家們能夠?qū)⒕Ψ旁跀?shù)據(jù)處理、創(chuàng)建模型和參數(shù)優(yōu)化,而不是編寫重復(fù)的訓(xùn)練循環(huán)代碼。 使用torchhandle,可以讓你的代碼更加簡(jiǎn)潔易讀,讓你的開發(fā)任務(wù)更加高效。

torchhandle將Pytorch的訓(xùn)練和推理過程進(jìn)行了抽象整理和提取,只要使用幾行代碼就可以實(shí)現(xiàn)PyTorch的深度學(xué)習(xí)管道。并可以生成完整訓(xùn)練報(bào)告,還可以集成tensorboard進(jìn)行可視化。

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)

定義一個(gè)模型,設(shè)置數(shù)據(jù)集,配置優(yōu)化器、損失函數(shù)就可以自動(dòng)訓(xùn)練了,是不是和TF差不多了。

讀到這里,這篇“有哪些提高數(shù)據(jù)科學(xué)工作效率并節(jié)省時(shí)間的Python庫”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI