面向Kaggle 和離線比賽實用工具庫 nyaggle,解決特徵工程與驗證兩...

2021-01-08 雷鋒網

雷鋒網 AI 開發者按:在大多數機器學習競賽中,特診工程的質量通常決定著整個作品的得分與排名,也是參賽者們非常看重的一部分。在 GitHub 上,作者 Nomi(專注於計算機視覺與嵌入式技術,也是 tiny-dnn 的原作者)向我們介紹了一個面向 kaggle 數據科學和離線競賽的實用工具庫 nyaggle,可供開發者專用於特徵工程與驗證。

作者簡介 來源:Nomi

工具庫 nyaggle

在機器學習和模式識別中,特徵工程的好壞將會影響整個模型的預測性能。其中特徵是在觀測現象中的一種獨立、可測量的屬性。選擇信息量大、有差別性、獨立的特徵是模式識別、分類和回歸問題的關鍵一步,可以幫助開發者最大限度地從原始數據中提取特徵以供算法和模型使用。

數據科學思維導圖 來源:網絡

而 nyaggle 就是一個特定於 Kaggle 和離線比賽的實用工具庫,它主要作用於四個部分,即:特徵工程、模型驗證、模型實驗以及模型融合,尤其在特徵工程和模型驗證方面有較強的性能。

其中,在特徵工程方面,nyaggle 包含了 K 個特徵目標編碼和 BERT 句子向量化。目標編碼使用的是目標變量的均值編碼類別變量,為訓練集中的每個分組計算目標變量的統計量,之後會合併驗證集、測試集以捕捉分組和目標之間的關係。BERT 句子向量化則是對 Bert 模型的輸入做一個向量化,提取詞句的三維信息。

BERT 詞句向量化示例 來源:網絡

nyaggle GitHub 地址:

https://github.com/nyanp/nyaggle 

nyaggle 實驗指南

API 詳情說明:nyaggle.experiment 類,實現模型實驗的各個功能

classnyaggle.experiment.Experiment(logging_directory, overwrite=False, custom_logger=None, with_mlflow=False, mlflow_run_id=None, logging_mode='w')

nyaggle.experiment.add_leaderboard_score(logging_directory, score)

nyaggle.experiment.average_results(source_files, output_filename, weight=None, input_format='csv', sample_submission_filename=None)

nyaggle.experiment.find_best_lgbm_parameter(base_param, X, y, cv=None, groups=None, time_budget=None, type_of_target='auto')

nyaggle.experiment.run_experiment(model_params,X_train,y,X_test = None,logging_directory ='output / {time}',overwrite = False,eval_func = None,algorithm_type ='lgbm',fit_params = None,cv = None,groups = None,categorical_feature = None,sample_submission = None,submission_filename = None,type_of_target ='auto',feature_list = None,feature_directory = None,with_auto_hpo = False,with_auto_prep = False,with_mlflow = False)

實驗詳細代碼

在典型的表格數據競賽中,開發者可能會通過交叉驗證重複進行評估,並記錄參數和結果以跟蹤實驗。

其中,run_experiment()正是用於此類交叉驗證實驗的高級 API,它在指定目錄下輸出參數、指標、異常預測、測試預測、功能重要性和 Submitting.csv。

它可以與 mlflow 跟蹤結合使用,如果使用 LightGBM 作為模型,則代碼將非常簡單如下所示:

import pandas as pdfrom nyaggle.experiment import run_experimentfrom nyaggle.experiment import make_classification_df

INPUT_DIR = '../input'target_column = 'target'

X_train = pd.read_csv(f'{INPUT_DIR}/train.csv')X_test = pd.read_csv(f'{INPUT_DIR}/test.csv')sample_df = pd.read_csv(f'{INPUT_DIR}/sample_submission.csv') # OPTIONAL

y = X_train[target_column]X_train = X_train.drop(target_column, axis=1)

lightgbm_params = {

        'max_depth': 8}

result = run_experiment(lightgbm_params,

                               X_train,

                               y,

                               X_test,

                               sample_submission=sample_df)

值得注意的是,默認的驗證策略是包含了 5 個特徵的計算機視覺,開發者可以通過傳遞 cv 參數來更改此行為(可參閱 API 參考,https://nyaggle.readthedocs.io/en/latest/source/nyaggle.html#)。

之後,run_experiment API 執行交叉驗證後,會將工件存儲到日誌目錄。輸出文件存儲如下:

output

└── 20200130123456                # yyyymmssHHMMSS

      ├── params.txt                   # Parameters

      ├── metrics.txt                   # Metrics (single fold & overall CV score)

      ├── oof_prediction.npy      # Out of fold prediction

      ├── test_prediction.npy     # Test prediction

      ├── 20200130123456.csv   # Submission csv file

      ├── importances.png        # Feature importance plot

      ├── log.txt                        # Log file

      └── models                      # The trained models for each fold

             ├── fold1

             ├── fold2

             ├── fold3

             ├── fold4

             └── fold5

而如果要使用 XGBoost、CatBoost 或其他 sklearn 估計器,則需要在代碼開頭指定算法類型,其中的參數將傳遞給 sklearn API 的構造函數(例如 LGBMClassifier)。

# CatBoostcatboost_params = {

       'eval_metric': 'Logloss',

       'loss_function': 'Logloss',

       'depth': 8,

       'task_type': 'GPU'}result = run_experiment(catboost_params,

                              X_train,

                              y,

                              X_test,

                              algorithm_type='cat')

# XGBoostxgboost_params = {

      'objective': 'reg:linear',

      'max_depth': 8}result = run_experiment(xgboost_params,

                             X_train,

                             y,

                             X_test,

                             algorithm_type='xgb')

# sklearn estimatorfrom sklearn.linear_model import Ridgerigde_params = {

        'alpha': 1.0}result = run_experiment(rigde_params,

                             X_train,

                             y,

                             X_test,

                             algorithm_type=Ridge)

如果想讓 GUI 儀錶板管理實驗,開發者則可以通過只設置 with_mlfow = True 來將 run_experiment 與 mlflow 一起使用(需要預先安裝 mlflow)。然後在與執行腳本相同的目錄中,運行即可。

result = run_experiment(params,

                                  X_train,

                                  y,

                                  X_test,

                                  with_mlflow=True)

然後在與執行腳本相同的目錄中,運行即可,相關結果(帶有 CV 得分和參數的實驗列表)可在 http:// localhost:5000 頁面上查看。

mlflow 結果頁面示例

注意:如果要自定義日誌記錄的行為,可以在 mlflow run 上下文中調用 run_experiment;如果正在運行,則 run_experiment 將使用當前正在運行的運行,而不是創建新的運行。

mlflow.set_tracking_uri('gs://ok-i-want-to-use-gcs')

with mlflow.start_run(run_name='your-favorite-run-name'):

     mlflow.log_param('something-you-want-to-log', 42)


     result = run_experiment(params,

                                             X_train,

                                             y,

                                             X_test,

                                             with_mlflow=True)

其它 API 說明

nyaggle.feature 類——以特徵格式管理運行系列功能

nyaggle.feature.category_encoder

其中,Kfold 包裝器用於類似 sklearn 的界面;此類包裝器的 TransformerMixIn 具有 fit / transform / fit_transform 方法的對象,並以 K 個特徵方式進行調用。而對於不同分類特徵的目標編碼運行方式如下:

對於分類目標  將特徵替換為給定特定分類值的目標後驗概率與所有訓練數據上目標的先驗概率的混合。

對於連續目標  用給定特定分類值的目標期望值和所有訓練數據上目標的期望值的混合替換特徵。

Class

nyaggle.feature.category_encoder.KFoldEncoderWrapper(base_transformer,cv = None,return_same_type = True,groups = None)

Class

nyaggle.feature.nlp.BertSentenceVectorizer(lang ='en',n_components = None,text_columns = None,pooling_strategy ='reduce_mean',use_cuda = False,tokenizer = None,model = None,return_same_type = True,column_format ='{col } _ {idx}')

nyaggle.feature_store 類——sklearn 兼容特徵生成器

nyaggle.feature_store.cached_feature(feature_name,directory ='。/ features /',ignore_columns = None)

nyaggle.feature_store.load_feature(feature_name,directory ='。/ features /',ignore_columns = None)

nyaggle.feature_store.load_features(base_df,feature_names,directory ='。/ features /',ignore_columns = None,create_directory = True,rename_duplicate = True)

nyaggle.feature_store.save_feature(df,feature_name,directory ='。/ features /',with_csv_dump = False,create_directory = True,reference_target_variable = None,overwrite = True)

nyaggle.validation 類——對抗性驗證,其中的驗證拆分器與 sklearn 兼容

classnyaggle.validation.SlidingWindowSplit(source, train_from, train_to, test_from, test_to, n_windows, stride)

classnyaggle.validation.Take(n, base_validator)

classnyaggle.validation.TimeSeriesSplit(source, times=None)

nyaggle.validation.adversarial_validate(X_train, X_test, importance_type='gain', estimator=None, cat_cols=None, cv=None)

nyaggle.validation.cross_validate(estimator, X_train, y, X_test=None, cv=None, groups=None, predict_proba=False, eval_func=None, logger=None, on_each_fold=None, fit_params=None, importance_type='gain', early_stopping=True, type_of_target='auto')

nyaggle.util 類

nyaggle.util.plot_importance(importance, path=None, top_n=100, figsize=None, title=None)

nyaggle.hyper_parameters 類——從以往的解決方案中選取 Hypara 相關參數

nyaggle.hyper_parameters.get_hyperparam_byname(name,gbdt_type ='lgbm',with_metadata = False)

nyaggle.hyper_parameters.list_hyperparams(gbdt_type ='lgbm',with_metadata = False)

雷鋒網 AI 開發者    雷鋒網(公眾號:雷鋒網)

雷鋒網原創文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • Kaggle比賽入門——房價預測
    Kaggle比賽Kaggle是一個著名的供機器學習愛好者交流的平臺。圖3.7展示了Kaggle網站的首頁。為了便於提交結果,需要註冊Kaggle帳號。我們可以在房價預測比賽的網頁上了解比賽信息和參賽者成績,也可以下載數據集並提交自己的預測結果。
  • Kaggle亞馬遜比賽冠軍專訪:利用標籤相關性來處理分類問題
    我的專業是計算機科學,有超過十年的Java編程經驗,目前工作方向是大規模數據處理、機器學習和深度學習。在這次比賽中,你用到了之前的哪些經驗和專業知識呢?今年我參加了kaggle上的不少關於深度學習的比賽,在比賽中獲得的經驗和直覺讓我受益匪淺。
  • 我是如何成為Kaggle全網第一的?
    在最初的嘗試中,我也使用了LGB,但知道還有更好的方法來處理圖。這種挑戰令我著迷,所以決定認真參與到競爭之中。我沒有一點相關領域知識(上一次看化學式還是在學校時),所以我決定完全使用機器學習技術:大量特徵工程、創建折外元特徵(out-of-fold meta-feature)等等。和往常一樣,我在Kernels上公開了自己的工作。從下圖中你可以看到,它們很受歡迎。
  • 深度高能粒子對撞追蹤:Kaggle TrackML粒子追蹤挑戰賽亞軍訪談
    而且,隨著探測器解析度的提高,需要更好的軟體來實時預處理和過濾最有用的數據,從而產生更多的數據。為了幫忙解決這個問題,一個在 CGRN(世界上最大的高能物理實驗室)工作,由機器學習專家和物理學家組成的小組,已經與 kaggle 和著名的贊助商合作來回答這個問題:機器學習能幫助高能物理學發現並描述新粒子嗎?
  • 這幾個常用的python庫你需要知道
    python可以說是近幾年最火熱、最實用的、最容易上手的工具之一了。功能強大、應用廣泛,可以幫你搜集工作數據,還能幫你下載音樂,電影,於是就掀起了一波學習python的大潮,小編也毫不猶豫的加入了。所以小編就整理了一些常用的python庫,希望對正在學習python的小夥伴有所幫助。1.MatplotlibMatplotlib是一個用於創建二維圖和圖形的底層庫。藉由它的幫助,你可以構建各種不同的圖標,從直方圖和散點圖到費笛卡爾坐標圖。matplotlib能夠與很多流行的繪圖庫結合使用。
  • 吸引7198 支隊伍參賽,看 Kaggle 信用預估比賽冠軍方案
    特徵工程跟許多人一樣,對於每個 SK_ID_CURR,我們只是基於 SK_ID_PREV 和 SK_ID_BUREAU 的特徵建立基礎模型,另外,我們還基於除法和減法從 application_train.csv 構造了許多特徵。
  • 2019年必知的10大頂級Python庫
    它是一個與 NumPy 和 SciPy 相關聯的 python 庫。它被認為是處理複雜數據的最佳庫之一。在這個庫中進行了許多修改。其中一個修改是交叉驗證特性,它提供了使用多個度量的能力。許多訓練方法,如物流回歸和最鄰近算法,都沒有得到什麼改善。
  • 數據分析秘籍在這裡:Kaggle 六大比賽最全面解析(上)
    此文為上篇,主要介紹結構化數據和 NLP 數據,包含 Titanic 比賽,房價預測比賽,惡意評論分類,恐怖小說家身份識別。下篇將會介紹兩個極具特色的圖像類比賽——樹葉分類競賽(Leaf Classification)和肺癌檢測比賽(Data Science Bowl 2017)。
  • 226個造價工程最實用計算工具,簡單實用省事
    226個造價工程最實用計算工具,簡單實用省事作為工程人最煩惱的就是工程量的計算,複雜多變的公式,繁瑣的計算量,想想就讓人頭疼。倘若有自動計算工具的幫助,會是一件多麼幸福的事情。今天就給大家整理了,工程造價人都在用的,226個造價工程最實用的計算工具,操作簡單易上手,輸入數據,自動的結果,簡單實用省事,很多工程人都在用它。工程人必備。
  • 機器學習:特徵選擇和降維實例
    不幸的是,在Do not Overfit II競賽(kaggle.com/c/dont-overfit-ii/data)中,領域知識的使用是不可能的,因為我們有一個二元目標和300個連續變量,這迫使我們嘗試特徵選擇技術。簡介通常,我們將特徵選擇和降維組合在一起使用。雖然這兩種方法都用於減少數據集中的特徵數量,但存在很大不同。
  • 深度體驗搜狗翻譯寶:離線翻譯+實景拍照翻譯很實用
    ware-搜狗公司並不是第一家推出旅行翻譯工具的公司。隨著出境遊日益升溫,人們對實時翻譯工具的需求也在不斷增加,應運而生的有手機翻譯軟體,以及翻譯硬體。然而,在實際使用過程中,這些產品都或多或少的讓使用者陷入尷尬。
  • 碩博研究生必備的論文網站和實用科研工具
    本文主要整理了21個常用的中外文獻論文網站,分為綜合型國內論文站網、綜合型國外論文網站、專業領域型論文網,以及4個常用的科研實用工具,分別為圖表繪製工具、數據備份軟體、論文撰寫工具、論文翻譯工具。網址:ucdrs.superlib.net/2、綜合型論文網站(國外)(1)歐洲學位論文庫介紹:收錄來自歐洲28個國家的563所大學的開放學術資源,所有用戶均可免費下載,閱讀和使用。
  • 數值數據的特徵工程
    特徵工程是從原始數據中提取特徵並將其轉換為可由機器學習模型攝取的格式的過程。通常需要進行轉換以減輕建模的難度並提高模型的結果。因此,設計數值數據類型的技術是數據科學家(無論是機器學習工程師)還是其炮兵的基本工具。「數據就像 機器學習的原油一樣 ,這意味著必須將其精煉為 特徵(預測變量)才能對訓練模型有用。」
  • 正則表達式生成工具,小白有這兩個工具就夠了
    嚴格來說,正則表達式不是一種開發語言,所以並不是每個人都能完全寫出來,它的規則有些奇怪,根本寫不出來,但是現在大多數項目都不能脫離它,特別是你要寫爬蟲、驗證等類型項目。今天有個粉絲給我公眾號發消息,問我有沒有在線生成的工具?當然有。今天,我想和大家分享兩個自動生成正則表達的工具,一個是在線網站工具,另一個是離線軟體工具,兩者都是自動生成正則表達式的,很實用的工具。
  • Kaggle比賽冠軍經驗分享:如何用 RNN 預測維基百科網絡流量
    核心思路簡單來說,Arthur Suilin 採用了 seq2seq 模型,使用一些調優方法在數據體現年份和四季帶來的波動。模型的主要依靠的信息源有兩類:局部特徵和全局特徵。1.一個好的模型應該完美結合全局特徵和局部特徵。
  • 50個實用的JavaScript工具
    安全工具  AttackAPI  AttackAPI是一個基於Web的攻擊構造庫,它可以結合PHP、JavaScript及其他客戶端和伺服器端技術進行使用。  jsfuzzer  它是一個fuzzing工具,幫助你使用JavaScript編寫/測試attack vectors。  新的替代JavaScript和Ajax的開發框架  Clean AJAX  Clean一個開源的Ajax引擎,一組簡化AJAX開發的高級接口。
  • 圖像特徵工程:HOG特徵描述子介紹
    介紹在機器學習算法的世界裡,特徵工程是非常重要的。實際上,作為一名數據科學家,這是我最喜歡的方面之一!從現有特徵中設計新特徵並改進模型的性能,這就是我們進行最多實驗的地方。世界上一些頂級數據科學家依靠特徵工程來提高他們在競賽排行榜得分。我相信你甚至會在結構化數據上使用各種特徵工程技術。
  • 開發者必備的15個實用Javascript庫
    【IT168 評論】JavaScript腳本庫是一個預先用JavaScript語言寫好的庫。使用JavaScript庫可以更輕鬆地開發基於JavaScript的應用程式,尤其是對於AJAX和其他以Web為中心的技術。當我們在為一個項目選定開發技術的時候,選擇一個明星框架當然很不錯,但是有些庫文件太大了。
  • Python學習120課 pandas簡介kaggle下載數據及pandas讀取外部數據
    pandas是一個專門做數據結構和數據分析的庫。●pandas的安裝推薦使用anaconda,只要安裝了anaconda,它裡面就會自帶pandas,這會為我們省去很多的麻煩。接下來就是用pandas去處理數據,數據從哪來呢?