日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

auto-sklearn案例解析一

發(fā)布時(shí)間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 auto-sklearn案例解析一 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡單的使用

>>> import autosklearn.classification>>> cls = autosklearn.classification.AutoSklearnClassifier()>>> cls.fit(X_train, y_train)>>> predictions = cls.predict(X_test)

該例子來自于官網(wǎng)首頁.
直接調(diào)用autosklearn自動(dòng)分類器即可使用,但是其他參數(shù)會(huì)直接選擇默認(rèn)參數(shù).autosklearn與sklearn的訓(xùn)練fit與predict參數(shù)是極其相似的,但是不懂的地方在于autosklearn的fit方法,訓(xùn)練的是一堆的機(jī)器學(xué)習(xí)算法,以及數(shù)據(jù)預(yù)處理算法,預(yù)測predict同樣的也是被選出來的最佳模型的預(yù)測結(jié)果.

fit()方法默認(rèn)的總是時(shí)間為time_left_for_this_task=3600, 每個(gè)算法的自動(dòng)調(diào)優(yōu)時(shí)間為per_run_time_limit=360,官方建議的時(shí)間為24個(gè)小時(shí),即time_left_for_this_task=86400,每個(gè)模型的計(jì)算時(shí)間為一個(gè)小時(shí),即為:per_run_time_limit=3600.

注意:在實(shí)際的測試中autosklearn想要獲得不錯(cuò)的最終運(yùn)算效果,確實(shí)需要話費(fèi)大量的時(shí)間,如果時(shí)間僅僅是幾個(gè)小時(shí)的話,很有可能它的最終結(jié)果要低于手動(dòng)調(diào)優(yōu)的結(jié)果,你可以使用限制算法選擇來加快計(jì)算速度.雖然一般而言autosklearn的在足夠的運(yùn)算時(shí)間后,能夠獲取高于手動(dòng)調(diào)優(yōu)的結(jié)果,但是我想你很多時(shí)候還是需要其他方式比如sklearn自帶的網(wǎng)格搜索或者隨機(jī)搜索,亦或是hyperopt這樣的調(diào)參神器.

限制搜索域

例子:

automl = autosklearn.classification.AutoSklearnClassifier(time_left_for_this_task=120, per_run_time_limit=120,include_estimators=["random_forest", ], exclude_estimators=None,include_preprocessors=["no_preprocessing", ], exclude_preprocessors=None)

其中參數(shù)include_estimators,要搜索的方法,exclude_estimators:為不搜索的方法.與參數(shù)include_estimators不兼容
include_preprocessors,可以參考手冊中的內(nèi)容

預(yù)處理在 auto-sklearn中共 分為數(shù)據(jù)預(yù)處理和 特征預(yù)處理功能兩個(gè)功能。 數(shù)據(jù)預(yù)處理包括一個(gè)對分類特征的獨(dú)熱編碼,對缺失值的處理,以及對特征和樣本的歸一化處理,這些步驟目前是無法關(guān)閉的.特征預(yù)處理則是一個(gè)單一的transformer(sklearn中對特征處理算法的稱呼與機(jī)器學(xué)習(xí)算法 估計(jì)器estimator相對應(yīng)),其實(shí)現(xiàn)了特征選擇與將特征轉(zhuǎn)換到不同空間(PCA).如前面的代碼所示,這可以通過 include_preprocessors=[“no_preprocessing”, ]來關(guān)閉.

exclude_preprocessors作用與exclude_estimators相似,含義就是不使用的預(yù)處理方式.與include_preprocessors不兼容

保存運(yùn)算數(shù)據(jù)以及模型

保存運(yùn)算數(shù)據(jù)

由之前的例子我們可知,autosklearn在運(yùn)算會(huì)產(chǎn)生兩個(gè)文件夾,其中保存著運(yùn)行的文件,而且這兩個(gè)文件的存儲位置有我們設(shè)定,但是因?yàn)樵谶\(yùn)算完之后這兩個(gè)文件夾默認(rèn)就會(huì)被刪除,所以假如我們想要看到這兩個(gè)文件夾中的文件,我們需要對我們的參數(shù)進(jìn)行設(shè)置:

# 第一個(gè)例子保存數(shù)據(jù)automl = autosklearn.classification.AutoSklearnClassifier(time_left_for_this_task=120, per_run_time_limit=120,tmp_folder='/home/fonttian/Data/Auto-sklearn/tmp/example_output_example_tmp',output_folder='/home/fonttian/Data/Auto-sklearn/tmp/example_output_example_out',delete_tmp_folder_after_terminate=False, delete_output_folder_after_terminate=False)

如上圖所示,必須設(shè)置兩個(gè)文件夾的位置,然后設(shè)置,delete_tmp_folder_after_terminate=False, delete_output_folder_after_terminate=False兩個(gè)參數(shù)為False,這兩個(gè)參數(shù)的作用是設(shè)置兩個(gè)對應(yīng)文件在運(yùn)算完畢后刪除

在以上參數(shù)的情況下,你還可以設(shè)置SMAC共享模型,參數(shù)為shared_mode=True,

保存模型

根據(jù)官網(wǎng)首頁的說法,模型的持久化方式與sklearn相似.我們確實(shí)可以采取相似的辦法進(jìn)行處理.

# 第二個(gè)例子:存儲模型,并加載import pickles = pickle.dumps(automl)with open('example_output_pickle.pkl', 'wb') as f:f.write(s)with open('example_output_pickle.pkl', 'rb') as f:s2 = f.read()clf = pickle.loads(s2)predictions = clf.predict(X_test)print("Accuracy score", sklearn.metrics.accuracy_score(y_test, predictions))

或者使用joblib進(jìn)行模型的存儲與加載,兩者效果差距不大,但是似乎joblib更好一些,但是有一點(diǎn)是同樣的就是隨著版本的改變同一個(gè)pkl文件不一定能夠被不同的版本加載并使用:

# 第三個(gè)例子:joblib 存儲模型并加載from sklearn.externals import joblibjoblib.dump(automl, 'example_output_joblib.pkl')clf = joblib.load('example_output_joblib.pkl')

評價(jià)函數(shù)其其他內(nèi)容請見另一篇筆記

防止過擬合

防止過擬合的參數(shù)為resampling_strategy 與 resampling_strategy_arguments

前者是字符串屬性的參數(shù),可選

  • ‘holdout’:分裂數(shù)據(jù)集為train:test,默認(rèn)為0.67,即train:test = 0.67:0.33
  • ‘holdout-iterative-fit’: 分裂方式與上面相同,但是在可能的情況下誰使用迭代匹配
  • ‘cv’:進(jìn)行交叉驗(yàn)證

第二個(gè)參數(shù),則是對前一個(gè)參數(shù)進(jìn)行設(shè)置的參數(shù),其輸入類型為dict,范圍:
‘holdout’: {‘train_size’: float} * ‘holdout-iterative-fit’: {‘train_size’: float} * ‘cv’: {‘folds’: int}

除此之外,如果使用前面的兩個(gè)參數(shù)的話,在 fit 完畢,選擇出最佳模型之后,還需要 refit 一次,這樣原來的模型才能根據(jù)新的數(shù)據(jù)進(jìn)行調(diào)整,然后才能進(jìn)行預(yù)測,直接使用 refit 命令無法進(jìn)行預(yù)測,而只是用fit命令,不適用 refit 命令也會(huì)報(bào)下面的錯(cuò)錯(cuò),:

'strategy %s, please call refit().' % self._resampling_strategy) NotImplementedError: Predict is currently not implemented for resampling strategy cv, please call refit().

中文翻譯鏈接

  • 官網(wǎng)首頁
  • AutoSklearn手冊

總結(jié)

以上是生活随笔為你收集整理的auto-sklearn案例解析一的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。