【机器学习】用PyCaret创建整个机器学习管道
作者 | Daniel Morales?
編譯 | VK?
來源 | Towards Data Science
本教程涵蓋了整個ML過程,從數據獲取、預處理、模型訓練、超參數擬合、預測和存儲模型以備將來使用。
我們將在不到10個命令中完成所有這些步驟,這些命令是自然構造的,并且非常直觀易記,例如
create_model(),? tune_model(),? compare_models() plot_model() evaluate_model() predict_model()讓我們看看全局
在大多數庫中,不使用PyCaret重新創建整個實驗需要100多行代碼。PyCaret還允許你執行更高級的操作,例如高級預處理、集成、廣義疊加和其他技術,這些技術允許你完全定制ML管道,這是任何數據科學家必須具備的。
PyCaret是一個開源的、底層的、使用Python的ML庫,它允許你在幾分鐘內從準備數據到部署模型。允許科學家和數據分析員從頭到尾高效地執行迭代數據科學實驗,并允許他們更快地得出結論,因為在編程上花費的時間要少得多。這個庫非常類似于Caret de R,但是用python實現的
在數據科學項目中,理解數據通常需要很長時間(EDA和特征工程)。那么,如果我們能把花在項目建模部分的時間減少一半呢?
讓我們看看怎么做
首先我們需要先決條件
Python 3.6或更高版本
PyCaret 2.0或更高版本
在這里你可以找到庫的文件和其他:https://pycaret.org/
首先,請運行以下命令:!pip3 install pycaret
對于google colab用戶:如果你在google colab中運行此筆記本,請在筆記本頂部運行以下代碼以顯示交互式圖像
from?pycaret.utils?import?enable_colab enable_colab()Pycaret模塊
Pycaret根據我們要執行的任務進行劃分,并且有不同的模塊,這些模塊代表每種類型的學習(有監督的或無監督的)。在本教程中,我們將使用二分類算法研究監督學習模塊。
分類模塊
PyCaret分類模塊(pycaret.classification)是一個有監督的機器學習模塊,用于根據各種技術和算法將元素分類為二類。分類問題的一些常見用途包括預測客戶違約(是或否)、客戶放棄(客戶將離開或留下)、遇到的疾病(陽性或陰性)等等。
PyCaret分類模塊可用于二或多類分類問題。它有18個以上的算法和14個分析模型性能的曲線圖。無論是超參數調整、加密還是諸如堆疊之類的高級技術,PyCaret的分類模塊都有。
在本教程中,我們將使用一個UCI數據集,稱為默認信用卡客戶數據集。此資料集包含2005年4月至2005年9月臺灣信用卡客戶的拖欠付款、人口統計資料、信用資料、付款記錄及帳單結算單的資料。有24000個樣本和25個特征。
數據集可以在這里找到。或者在這里你可以找到一個直接的下載鏈接:https://drive.google.com/file/u/2/d/1bVUAk2Y4bdqKx-2NAPk0b4mIOv078zl6/view?usp=sharing
所以,將數據集下載到你的環境中,然后我們將像這樣加載它
[2]:
import?pandas?as?pd[3]:
df?=?pd.read_csv('datasets/default?of?credit?card?clients.csv')[4]
df.head()[4]的輸出
1-獲取數據
我們還有另一種加載方法。實際上,這將是我們在本教程中使用的默認方式。它直接來自PyCaret數據集,是我們管道的第一個方法
from?pycaret.datasets?import?get_data dataset?=?get_data('credit')#?檢查數據的形狀 dataset.shape為了演示predict_model函數對未查看的數據的作用,保留了原始數據集中1200條記錄的樣本,以便在預測中使用。
這不應與訓練/測試分割相混淆,因為這個特殊的分割是為了模擬真實的場景。另一種思考方式是,在進行ML實驗時,這1200條記錄是不可用的。
[7]:
## sample從對象的一個軸返回一個隨機樣本。那將是22800個樣本,而不是24000個 data?=?dataset.sample(frac=0.95,?random_state=786)[8]:
data #?我們從原始數據集中刪除這些隨機數據 data_unseen?=?dataset.drop(data.index)[10]:
#?未查看的數據集##?我們重置了兩個數據集的索引 data.reset_index(inplace=True,?drop=True) data_unseen.reset_index(inplace=True,?drop=True) print('Data?for?Modeling:?'?+?str(data.shape)) print('Unseen?Data?For?Predictions:?'?+?str(data_unseen.shape))Data?for?Modeling:?(22800,?24) Unseen?Data?For?Predictions:?(1200,?24)拆分數據
我們劃分數據集的方式很重要,因為有些數據在建模過程中不會使用,我們將在最后通過模擬真實數據來驗證我們的結果。我們將用于建模的數據進行細分,以便評估訓練和測試這兩個場景。因此,我們做了以下工作
驗證數據集
是用于提供最終模型的無偏評估的數據樣本。
驗證數據集提供了用于評估模型的黃金標準。
它只在模型完全訓練后使用(使用訓練集和測試集)。
驗證集通常用于評估比賽的模型(例如,在許多Kaggle比賽時,測試集與訓練測試集一起初始發布,驗證集僅在比賽即將結束時發布,驗證集模型的結果決定了勝利者)。
很多時候測試集被用作驗證集,但這不是一個好的實踐。
驗證集通常都很好地修復了。
它包含了仔細采樣的數據,這些數據涵蓋了模型在現實世界中使用時將面臨的各種類。
訓練數據集
訓練數據集:用于訓練模型的數據樣本。
我們用來訓練模型的數據集
模型看這些數據并學習。
測試數據集
測試數據集:在調整模型超參數時,用于提供與訓練數據集匹配的數據樣本。
隨著測試數據集中的信息被納入模型中,評估變得更加有偏見。
測試集用于評估給定的模型,但這是用于頻繁評估的。
作為ML工程師,我們使用這些數據來微調模型的超參數。
因此,模型偶爾會看到這些數據,但從不從中“學習”。
我們使用測試集的結果,更新更高級別的超參數
所以測試集會影響模型,但只是間接的。
測試集也稱為開發集。這是有意義的,因為這個數據集在模型的“開發”階段有幫助。
術語混淆
有一種混淆測試和驗證集名稱的趨勢。
根據教程、來源、書籍、視頻或老師/導師的不同,術語會有所變化,重要的是要保持概念不變。
在我們的例子中,我們已經在開始時分離了驗證集
2-設置PyCaret環境
現在讓我們設置Pycaret環境。函數的作用是:初始化pycaret中的環境,并創建轉換管道,為建模和部署準備數據。
在pycaret中執行任何其他函數之前必須調用setup()。它需要兩個必需的參數:pandas dataframe和目標列的名稱。這部分配置大部分是自動完成的,但有些參數可以手動設置。例如:
默認的分割比是70:30(正如我們在上面的段落中看到的),但是可以用“train_size”來更改。
K折疊交叉驗證默認設置為10
“session_id”是我們經典的“random_state”
[12]:
##?設置環境 from?pycaret.classification?import?*注意:運行以下命令后,必須按enter鍵完成此過程。我們會解釋他們是怎么做到的。安裝過程可能需要一些時間才能完成。
[13]:
model_setup?=?setup(data=data,?target='default',?session_id=123)運行setup()時,PyCaret的推理算法將根據某些屬性自動推斷出所有特征的數據類型。但情況并非總是如此。
為了考慮到這一點,PyCaret在執行setup()之后會顯示一個包含特征及其推斷數據類型的表。如果正確識別了所有數據類型,則可以按enter繼續,或按exit結束實驗。我們按enter鍵,輸出的結果應該和上面的一樣。
確保數據類型是正確的在PyCaret中是至關重要的,因為它自動執行一些預處理任務,這些任務對于任何ML實驗都是必不可少的。對于每種類型的數據,執行任務的方式不同,所以這意味著正確配置非常重要。
我們可以使用setup()中的numeric_features和category_features參數覆蓋從PyCaret推斷的數據類型。一旦設置成功執行,將打印包含幾個重要信息的信息網格。大多數信息都與運行setup()時生成的預處理管道有關
這些特征中的大多數都超出了本教程的范圍,但是,在此階段需要記住的一些重要的包括
session_id:一個偽隨機數,作為種子分布在所有函數中,以便以后的重現性。
目標類型:二或多類。自動檢測并顯示目標類型。
Label encoded:當目標變量的類型為string(即“Yes”或“No”)而不是1或0時,它會自動在1和0處對標簽進行編碼,并將映射(0:No,1:Yes)顯示為引用
原始數據:顯示數據集的原始形式。在這個實驗中是(22800,24)
缺少值:當原始數據中缺少值時,將顯示為True
數值特征:推斷為數值特征的數量。
類別特征:推斷為類別特征的數量
轉換后的訓練組:注意,原來的(22800,24)形式被轉換為(15959,91),由于分類編碼,特征的數量從24增加到91
轉換測試集:測試集中有6841個樣本。此拆分基于默認值70/30,可使用配置中的“訓練大小”參數進行更改。
注意一些必須進行建模的任務是如何自動處理的,例如缺失值的插補(在這種情況下,訓練數據中沒有缺失的值,但我們仍然需要為看不見的數據提供插補器)、分類編碼等。
大部分setup()參數是可選的,用于自定義預處理管道。
3-比較模型
為了理解PyCaret是如何比較模型和管道中的下一步的,有必要理解N-fold交叉驗證的概念。
N-Fold 交叉驗證
計算有多少數據應該劃分到測試集中是一個微妙的問題。
如果你的訓練集太小,你的算法可能沒有足夠的數據來有效地學習。另一方面,如果你的測試集太小,那么你的準確度、精確度、召回率和F1分數可能會有很大的變化。
你可能很幸運,也可能很不幸!一般來說,將70%的數據放在訓練集中,30%的數據放在測試集中是一個很好的起點。有時你的數據集太小了,70/30會產生很大的差異。
一種解決方法是執行N折交叉驗證。這里的中心思想是,我們將整個過程進行N次,然后平均精度。例如,在10折交叉驗證中,我們將測試集的前10%的數據,并計算準確度、精確度、召回率和F1分數。
然后,我們將使交叉驗證建立第二個10%的數據,我們將再次計算這些統計數據。我們可以做這個過程10次,每次測試集都會有一段不同的數據。然后我們平均所有的準確度。
注意:驗證集(這里是黃色)是我們案例中的測試集
了解模型的準確度是非常寶貴的,因為可以開始調整模型的參數以提高模型的性能。
例如,在K-最近鄰算法中,你可以看到當你增加或減少K時,精確度會發生什么變化。一旦你對模型的性能感到滿意,就應該輸入驗證集了(在我們的例子中是看不見的)。
它應該是你真正感興趣的真實世界數據的替代品。它的工作原理與測試集非常相似,只是在構建或優化模型時從未接觸過這些數據。通過找到精度指標,你可以很好地了解算法在現實世界中的性能。
比較所有模型
在PyCaret setup()完成后,建議將所有模型進行比較以評估性能(除非你確切知道需要什么類型的模型,通常情況下并非如此),該函數訓練模型庫中的所有模型,并使用分層交叉驗證對其進行評分,以評估度量。
輸出將打印一個分數網格,該網格顯示精度、AUC、召回率、精度、F1、Kappa和MCC的平均值(默認為10)以及訓練時間。開始吧!
[14]:
best_model?=?compare_models()compare_models()函數的作用是:一次比較多個模型。這是使用PyCaret的最大優點之一。在一行中,你可以看到許多模型之間的比較表。兩個簡單的單詞(甚至不是一行代碼)已經使用N倍交叉驗證訓練和評估了超過15個模型。
以上打印的表格突出顯示了最高性能指標,僅供比較之用。默認表使用“精度”(從最高到最低)排序,可以通過傳遞參數來更改。例如,compare_models(sort = 'Recall')將根據召回而不是準確度對網格進行排序。
如果要將Fold參數從默認值10更改為其他值,可以使用Fold參數。例如,compare_models(fold = 5)將在5倍交叉驗證中比較所有模型。減少折疊次數可以縮短訓練時間。
默認情況下,compare_models根據默認的排序順序返回性能最好的模型,但是它可以使用N_select參數返回前N個模型的列表。此外,它還返回一些指標,如精確度、AUC和F1。另一個很酷的事情是庫如何自動突出顯示最佳結果。一旦選擇了模型,就可以創建模型,然后對其進行優化。我們試試用其他方法:
[15]:
print(best_model)RidgeClassifier(alpha=1.0,?class_weight=None,?copy_X=True,?fit_intercept=True,max_iter=None,?normalize=False,?random_state=123,?solver='auto',tol=0.001)4-創建模型
create_model是PyCaret中最細粒度的函數,通常是PyCaret大多數功能的基礎。正如它的名字所示,這個函數使用交叉驗證(可以用參數fold設置)來訓練和評估模型。輸出打印一個計分表,按Fold 顯示精度、AUC、召回率、F1、Kappa和MCC。
在本教程的其余部分中,我們將使用以下模型作為候選模型。這些選擇僅用于說明目的,并不一定意味著他們是最好的執行者或這類數據的理想選擇
決策樹分類器('dt')
K近鄰分類器('knn')
隨機森林分類器('rf')
PyCaret模型庫中有18個分類器可用。要查看所有分類器的列表,請查看文檔或使用models()函數查看庫。
[16]:
models() dt?=?create_model('dt') #?訓練的模型對象存儲在變量'dt'中。 print(dt)DecisionTreeClassifier(ccp_alpha=0.0,?class_weight=None,?criterion='gini',max_depth=None,?max_features=None,?max_leaf_nodes=None,min_impurity_decrease=0.0,?min_impurity_split=None,min_samples_leaf=1,?min_samples_split=2,min_weight_fraction_leaf=0.0,?presort='deprecated',random_state=123,?splitter='best')[19]:
knn?=?create_model('knn') print(knn)KNeighborsClassifier(algorithm='auto',?leaf_size=30,?metric='minkowski',metric_params=None,?n_jobs=-1,?n_neighbors=5,?p=2,weights='uniform')[21]:
rf?=?create_model('rf') print(rf)RandomForestClassifier(bootstrap=True,?ccp_alpha=0.0,?class_weight=None,criterion='gini',?max_depth=None,?max_features='auto',max_leaf_nodes=None,?max_samples=None,min_impurity_decrease=0.0,?min_impurity_split=None,min_samples_leaf=1,?min_samples_split=2,min_weight_fraction_leaf=0.0,?n_estimators=100,n_jobs=-1,?oob_score=False,?random_state=123,?verbose=0,warm_start=False)請注意,所有模型的平均分數與compare_models()上打印的分數匹配。這是因為compare_models()分數網格中打印的指標是所有折的平均分數。
你還可以在每個模型的每個print()中看到用于構建它們的超參數。這是非常重要的,因為它是改進它們的基礎。你可以看到RandomForestClassifier的參數
max_depth=None max_features='auto' min_samples_leaf=1 min_samples_split=2 min_weight_fraction_leaf=0.0 n_estimators=100 n_jobs=-15-調整模型
使用create_model()函數創建模型時,默認的超參數用于訓練模型。要調整超參數,請使用tune_model()函數。此函數使用預定義搜索空間中的隨機網格搜索自動調整模型的超參數。
輸出打印一個分數網格,顯示準確度、AUC、召回率、精密度、F1、Kappa和MCC,以獲得最佳模型。要使用自定義搜索網格,可以在tune_model函數中傳遞custom_grid參數
[23]:
tuned_rf?=?tune_model(rf)如果我們將這個改進的RandomForestClassifier模型與之前的RandomForestClassifier模型的準確度指標進行比較,我們會發現一個差異,因為它的精確度從0.8199提高到了0.8203。
[24]:
#?優化模型對象存儲在變量“tuned_dt”中。print(tuned_rf) RandomForestClassifier(bootstrap=False,?ccp_alpha=0.0,?class_weight={},criterion='entropy',?max_depth=5,?max_features=1.0,max_leaf_nodes=None,?max_samples=None,min_impurity_decrease=0.0002,?min_impurity_split=None,min_samples_leaf=5,?min_samples_split=10,min_weight_fraction_leaf=0.0,?n_estimators=150,n_jobs=-1,?oob_score=False,?random_state=123,?verbose=0,warm_start=False)現在我們來比較一下超參數。我們以前是:
max_depth=None max_features='auto' min_samples_leaf=1 min_samples_split=2 min_weight_fraction_leaf=0.0 n_estimators=100 n_jobs=-1而現在是:
max_depth=5 max_features=1.0 min_samples_leaf=5 min_samples_split=10 min_weight_fraction_leaf=0.0 n_estimators=150 n_jobs=-1你可以自己用knn和dt做同樣的比較,探索超參數之間的差異。
默認情況下,tune_model優化精度,但可以使用optimize參數更改此值。例如:tune_model(dt,optimize='AUC')將查找決策樹分類器的超參數,該分類器將導致最高的AUC而不是準確性。在本例中,我們僅為簡單起見使用了Accuracy的默認度量。
一般來說,當數據集不平衡(像我們正在使用的信用數據集)時,精度不是一個很好的度量標準。選擇正確的度量來評估的方法超出了本教程的范圍。
在為生產選擇最佳模型時,度量并不是你應該考慮的唯一標準。其他要考慮的因素包括訓練時間、k-folds的標準差等。現在,讓我們繼續考慮隨機森林分類器tuned_rf,作為本教程其余部分的最佳模型
6-繪制模型
在完成模型(步驟8)之前,plot#model()函數可以通過AUC、混淆矩陣、決策邊界等不同方面來分析性能。該函數獲取一個經過訓練的模型對象,并根據訓練/測試集返回一個圖形。
有15種不同的繪圖,請參閱plot_model()文檔以獲取可用繪圖的列表。
[25]:
#?AUC?圖plot_model(tuned_rf,?plot?=?'auc') ##?PR?曲線plot_model(tuned_rf,?plot?=?'pr') ##?特征重要性plot_model(tuned_rf,?plot='feature') ##?混淆矩陣plot_model(tuned_rf,?plot?=?'confusion_matrix')7-評估模型
分析模型性能的另一種方法是使用evaluate_model()函數,該函數顯示給定模型的所有可用圖形的用戶界面。在內部它使用plot_model()函數。
[29]:
evaluate_model(tuned_rf)8-最終確定模型
模型的建立是實驗的最后一步。PyCaret中的正常機器學習工作流從setup()開始,然后使用compare_models()對所有模型進行比較,并預先選擇一些候選模型(基于感興趣的度量),以執行各種建模技術,如超參數擬合、裝配、堆疊等。
此工作流最終將引導你找到用于對新的和未查看的數據進行預測的最佳模型。
finalize_model()函數使模型擬合完整的數據集,包括測試樣本(在本例中為30%)。此函數的目的是在將模型部署到生產環境之前,對模型進行完整的數據集訓練。我們可以在predict_model()之后或之前執行此方法。我們要在這之后執行。
最后一句警告。使用finalize_model()完成模型后,整個數據集(包括測試集)將用于訓練。因此,如果在使用finalize_model()之后使用模型對測試集進行預測,則打印的信息網格將產生誤導,因為它試圖對用于建模的相同數據進行預測。
為了證明這一點,我們將在predict_model()中使用final_rf來比較信息網格與前面的網格。
[30]:
final_rf?=?finalize_model(tuned_rf)[31]:
#?部署的最終隨機森林模型參數 print(final_rf)RandomForestClassifier(bootstrap=False,?ccp_alpha=0.0,?class_weight={},criterion='entropy',?max_depth=5,?max_features=1.0,max_leaf_nodes=None,?max_samples=None,min_impurity_decrease=0.0002,?min_impurity_split=None,min_samples_leaf=5,?min_samples_split=10,min_weight_fraction_leaf=0.0,?n_estimators=150,n_jobs=-1,?oob_score=False,?random_state=123,?verbose=0,warm_start=False)9-用模型預測
在最終確定模型之前,建議通過預測測試和查看評估指標來執行最終檢查。如果你查看信息表,你將看到30%(6841個樣本)的數據被分離為測試集樣本。
我們在上面看到的所有評估指標都是基于訓練集(70%)的交叉驗證結果。現在,使用存儲在tuned_rf變量中的最終訓練模型,我們根據測試樣本進行預測,并評估指標,看它們是否與CV結果有實質性差異
[32]:
predict_model(final_rf)測試集的準確度為0.8199,而tuned_rf的結果為0.8203。這并不是一個顯著的區別。如果測試集和訓練集的結果之間存在較大差異,這通常表示過擬合,但也可能是由于其他幾個因素造成的,需要進一步調查。
在本例中,我們將繼續完成模型,并對不可見的數據進行預測(我們在開始時分離的5%的數據,它們從未暴露在PyCaret中)。
提示:使用create_model()時,最好查看訓練集結果的標準差。
predict_model()函數還用于預測未查看的數據集。唯一不同的是,這次我們將傳遞參數數據。data_unseen是在教程開始時創建的變量,包含5%(1200個示例)的原始數據集,這些數據集從未公開給PyCaret。
[33]:
unseen_predictions?=?predict_model(final_rf,?data=data_unseen) unseen_predictions.head()請轉到上一個結果的最后一列,你將看到一個名為Score的新特征
Label是預測,score是預測的概率。請注意,預測結果與原始數據集連接,而所有轉換都在后臺自動執行。
我們已經完成了實驗,最終確定了tuned_rf模型,該模型現在存儲在final_rf變量中。
我們還使用了final_rf中存儲的模型來預測未知數據。這就結束了我們的實驗,但還有一個問題:當你有更多的新數據要預測時會發生什么?你必須把整個實驗再看一遍嗎?
答案是否定的,PyCaret內置的save_model()函數允許你保存模型以及所有轉換管道以供以后使用,并存儲在本地環境中的Pickle中
(提示:保存模型時最好使用文件名中的日期,這有利于版本控制)
讓我們看看下一步
10-保存/加載模型
保存模型
[35]:
save_model(final_rf,?'datasets/Final?RF?Model?19Nov2020')Transformation?Pipeline?and?Model?Succesfully?Saved[35]:
(Pipeline(memory=None,steps=[('dtypes',DataTypes_Auto_infer(categorical_features=[],display_types=True,?features_todrop=[],id_columns=[],ml_usecase='classification',numerical_features=[],?target='default',time_features=[])),('imputer',Simple_Imputer(categorical_strategy='not_available',fill_value_categorical=None,fill_value_numerical=None,numeric_stra...RandomForestClassifier(bootstrap=False,?ccp_alpha=0.0,class_weight={},?criterion='entropy',max_depth=5,?max_features=1.0,max_leaf_nodes=None,?max_samples=None,min_impurity_decrease=0.0002,min_impurity_split=None,min_samples_leaf=5,min_samples_split=10,min_weight_fraction_leaf=0.0,n_estimators=150,?n_jobs=-1,oob_score=False,?random_state=123,verbose=0,?warm_start=False)]],verbose=False),'datasets/Final?RF?Model?19Nov2020.pkl')加載模型
要在同一環境或其他環境中加載在將來某個日期保存的模型,我們將使用PyCaret的load_model()函數,然后輕松地將保存的模型應用到新的未查看的數據中以進行預測
[37]:
saved_final_rf?=?load_model('datasets/Final?RF?Model?19Nov2020')Transformation?Pipeline?and?Model?Successfully?Loaded一旦模型加載到環境中,就可以使用相同的predict_model()函數來預測任何新數據。接下來,我們應用加載模型來預測我們以前使用過的相同數據。
[38]:
new_prediction?=?predict_model(saved_final_rf,?data=data_unseen)[39]:
new_prediction.head()[39]:
from?pycaret.utils?import?check_metric check_metric(new_prediction.default,?new_prediction.Label,?'Accuracy')[41]:
0.8167利弊
與任何新庫一樣,仍有改進的余地。我們將列出在使用該庫時發現的一些利弊。
優點:
它使項目的建模部分更加容易。
只需一行代碼就可以創建許多不同的分析。
在擬合模型時,可以不用傳遞參數列表。PyCaret會自動為你執行此操作。
你有許多不同的選項來評估模型,同樣,只需要一行代碼
因為它是在著名的ML庫之上構建的,所以可以很容易地將其與傳統方法進行比較
缺點:
這個庫是早期版本,所以它還不夠成熟,容易受到bug的影響
作為所有的automl庫,它是一個黑匣子,所以你不能真正看到里面發生了什么。因此,我不推薦初學者使用。
這可能會使學習過程有點膚淺。
結論
本教程涵蓋了整個ML過程,從數據攝取、預處理、模型訓練、超參數擬合、預測和存儲模型以備以后使用。
我們只用了不到10個命令就完成了所有這些步驟,這些命令都是自然構造的,并且非常直觀易記,例如create_model()、tune_model()、compare_models()。如果不使用PyCaret重新創建整個實驗,大多數庫需要100多行代碼。
該庫還允許你執行更高級的操作,例如高級預處理、集成、廣義疊加和其他技術,這些技術允許你完全定制ML管道,這是任何數據科學家必須具備的
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯 獲取本站知識星球優惠券,復制鏈接直接打開: https://t.zsxq.com/qFiUFMV 本站qq群704220115。加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【机器学习】用PyCaret创建整个机器学习管道的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 时光手帐怎么修改作品 时光手帐修改作品封
- 下一篇: ie浏览器剪贴板操作警告弹窗关闭方法