auto-sklearn案例解析一
簡單的使用
>>> import autosklearn.classification>>> cls = autosklearn.classification.AutoSklearnClassifier()>>> cls.fit(X_train, y_train)>>> predictions = cls.predict(X_test)該例子來自于官網首頁.
直接調用autosklearn自動分類器即可使用,但是其他參數會直接選擇默認參數.autosklearn與sklearn的訓練fit與predict參數是極其相似的,但是不懂的地方在于autosklearn的fit方法,訓練的是一堆的機器學習算法,以及數據預處理算法,預測predict同樣的也是被選出來的最佳模型的預測結果.
fit()方法默認的總是時間為time_left_for_this_task=3600, 每個算法的自動調優時間為per_run_time_limit=360,官方建議的時間為24個小時,即time_left_for_this_task=86400,每個模型的計算時間為一個小時,即為:per_run_time_limit=3600.
注意:在實際的測試中autosklearn想要獲得不錯的最終運算效果,確實需要話費大量的時間,如果時間僅僅是幾個小時的話,很有可能它的最終結果要低于手動調優的結果,你可以使用限制算法選擇來加快計算速度.雖然一般而言autosklearn的在足夠的運算時間后,能夠獲取高于手動調優的結果,但是我想你很多時候還是需要其他方式比如sklearn自帶的網格搜索或者隨機搜索,亦或是hyperopt這樣的調參神器.
限制搜索域
例子:
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)其中參數include_estimators,要搜索的方法,exclude_estimators:為不搜索的方法.與參數include_estimators不兼容
而include_preprocessors,可以參考手冊中的內容
預處理在 auto-sklearn中共 分為數據預處理和 特征預處理功能兩個功能。 數據預處理包括一個對分類特征的獨熱編碼,對缺失值的處理,以及對特征和樣本的歸一化處理,這些步驟目前是無法關閉的.特征預處理則是一個單一的transformer(sklearn中對特征處理算法的稱呼與機器學習算法 估計器estimator相對應),其實現了特征選擇與將特征轉換到不同空間(PCA).如前面的代碼所示,這可以通過 include_preprocessors=[“no_preprocessing”, ]來關閉.
exclude_preprocessors作用與exclude_estimators相似,含義就是不使用的預處理方式.與include_preprocessors不兼容
保存運算數據以及模型
保存運算數據
由之前的例子我們可知,autosklearn在運算會產生兩個文件夾,其中保存著運行的文件,而且這兩個文件的存儲位置有我們設定,但是因為在運算完之后這兩個文件夾默認就會被刪除,所以假如我們想要看到這兩個文件夾中的文件,我們需要對我們的參數進行設置:
# 第一個例子保存數據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)如上圖所示,必須設置兩個文件夾的位置,然后設置,delete_tmp_folder_after_terminate=False, delete_output_folder_after_terminate=False兩個參數為False,這兩個參數的作用是設置兩個對應文件在運算完畢后刪除
在以上參數的情況下,你還可以設置SMAC共享模型,參數為shared_mode=True,
保存模型
根據官網首頁的說法,模型的持久化方式與sklearn相似.我們確實可以采取相似的辦法進行處理.
# 第二個例子:存儲模型,并加載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進行模型的存儲與加載,兩者效果差距不大,但是似乎joblib更好一些,但是有一點是同樣的就是隨著版本的改變同一個pkl文件不一定能夠被不同的版本加載并使用:
# 第三個例子:joblib 存儲模型并加載from sklearn.externals import joblibjoblib.dump(automl, 'example_output_joblib.pkl')clf = joblib.load('example_output_joblib.pkl')評價函數其其他內容請見另一篇筆記
防止過擬合
防止過擬合的參數為resampling_strategy 與 resampling_strategy_arguments
前者是字符串屬性的參數,可選
- ‘holdout’:分裂數據集為train:test,默認為0.67,即train:test = 0.67:0.33
- ‘holdout-iterative-fit’: 分裂方式與上面相同,但是在可能的情況下誰使用迭代匹配
- ‘cv’:進行交叉驗證
第二個參數,則是對前一個參數進行設置的參數,其輸入類型為dict,范圍:
‘holdout’: {‘train_size’: float} * ‘holdout-iterative-fit’: {‘train_size’: float} * ‘cv’: {‘folds’: int}
除此之外,如果使用前面的兩個參數的話,在 fit 完畢,選擇出最佳模型之后,還需要 refit 一次,這樣原來的模型才能根據新的數據進行調整,然后才能進行預測,直接使用 refit 命令無法進行預測,而只是用fit命令,不適用 refit 命令也會報下面的錯錯,:
'strategy %s, please call refit().' % self._resampling_strategy) NotImplementedError: Predict is currently not implemented for resampling strategy cv, please call refit().中文翻譯鏈接
- 官網首頁
- AutoSklearn手冊
總結
以上是生活随笔為你收集整理的auto-sklearn案例解析一的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: auto-sklearn简介
- 下一篇: auto-sklearn案例解析二