一個令人愉快的機器學習工具,讓您無需編寫程式碼即可訓練/擬合、測試和使用模型
筆記
我還在根據人們的要求為 igel 開發 GUI 桌面應用程式。您可以在 Igel-UI 下找到它。
目錄
該計畫的目標是為每個人(包括技術用戶和非技術用戶)提供機器學習。
有時我需要一個工具,我可以用它來快速創建機器學習原型。是否建立一些概念驗證、建立快速草稿模型來證明觀點或使用自動機器學習。我發現自己經常陷入編寫樣板程式碼並思考太多從哪裡開始。因此,我決定創建這個工具。
igel 建構在其他機器學習框架之上。它提供了一種使用機器學習的簡單方法,無需編寫任何程式碼。 Igel 是高度可自訂的,但前提是您願意。 Igel 不會強迫您自訂任何東西。除了預設值之外,igel 還可以使用自動機器學習功能來找出可以很好地處理您的資料的模型。
您所需要的只是一個yaml (或json )文件,您需要在其中描述您要執行的操作。就是這樣!
Igel 支援迴歸、分類和聚類。 Igel 支援自動機器學習功能,例如 ImageClassification 和 TextClassification
Igel 支援資料科學領域最常用的資料集類型。例如,您的輸入資料集可以是您要取得的 csv、txt、excel 工作表、json 甚至 html 檔案。如果您使用自動機器學習功能,那麼您甚至可以將原始資料提供給 igel,它會找出如何處理它。稍後將在範例中詳細介紹這一點。
$ pip install -U igel
Igel支援的型號:
+--------------------+----------------------------+-------------------------+
| regression | classification | clustering |
+--------------------+----------------------------+-------------------------+
| LinearRegression | LogisticRegression | KMeans |
| Lasso | Ridge | AffinityPropagation |
| LassoLars | DecisionTree | Birch |
| BayesianRegression | ExtraTree | AgglomerativeClustering |
| HuberRegression | RandomForest | FeatureAgglomeration |
| Ridge | ExtraTrees | DBSCAN |
| PoissonRegression | SVM | MiniBatchKMeans |
| ARDRegression | LinearSVM | SpectralBiclustering |
| TweedieRegression | NuSVM | SpectralCoclustering |
| TheilSenRegression | NearestNeighbor | SpectralClustering |
| GammaRegression | NeuralNetwork | MeanShift |
| RANSACRegression | PassiveAgressiveClassifier | OPTICS |
| DecisionTree | Perceptron | KMedoids |
| ExtraTree | BernoulliRBM | ---- |
| RandomForest | BoltzmannMachine | ---- |
| ExtraTrees | CalibratedClassifier | ---- |
| SVM | Adaboost | ---- |
| LinearSVM | Bagging | ---- |
| NuSVM | GradientBoosting | ---- |
| NearestNeighbor | BernoulliNaiveBayes | ---- |
| NeuralNetwork | CategoricalNaiveBayes | ---- |
| ElasticNet | ComplementNaiveBayes | ---- |
| BernoulliRBM | GaussianNaiveBayes | ---- |
| BoltzmannMachine | MultinomialNaiveBayes | ---- |
| Adaboost | ---- | ---- |
| Bagging | ---- | ---- |
| GradientBoosting | ---- | ---- |
+--------------------+----------------------------+-------------------------+
對於汽車機器學習:
help 指令對於檢查支援的指令和對應的參數/選項非常有用
$ igel --help
您也可以執行子命令的協助,例如:
$ igel fit --help
Igel 是高度可自訂的。如果您知道自己想要什麼並且想要手動配置模型,請查看接下來的部分,它將指導您如何編寫 yaml 或 json 設定檔。之後,您只需告訴 igel 要做什麼以及在哪裡可以找到您的資料和設定檔。這是一個例子:
$ igel fit --data_path ' path_to_your_csv_dataset.csv ' --yaml_path ' path_to_your_yaml_file.yaml '
但是,您也可以使用 auto-ml 功能,讓 igel 為您完成所有工作。一個很好的例子是影像分類。假設您已經有一個原始影像資料集儲存在名為images 的資料夾中
您所要做的就是運行:
$ igel auto-train --data_path ' path_to_your_images_folder ' --task ImageClassification
就是這樣! Igel 將從目錄中讀取圖像,處理資料集(轉換為矩陣、重新縮放、分割等)並開始訓練/優化適合您的資料的模型。正如您所看到的,這非常簡單,您只需提供資料的路徑和要執行的任務。
筆記
這項功能的計算成本很高,因為 igel 會嘗試許多不同的模型並比較它們的性能,以便找到「最佳」模型。
您可以執行幫助命令來取得說明。您還可以運行子命令的幫助!
$ igel --help
第一步是提供 yaml 檔案(如果需要,也可以使用 json)
您可以透過建立 .yaml 檔案(按照慣例稱為 igel.yaml,但您可以隨意命名)並自行編輯來手動執行此操作。但是,如果您很懶(您可能像我一樣:D),您可以使用 igel init 命令快速入門,這將為您即時建立一個基本設定檔。
"""
igel init --help
Example:
If I want to use neural networks to classify whether someone is sick or not using the indian-diabetes dataset,
then I would use this command to initialize a yaml file n.b. you may need to rename outcome column in .csv to sick:
$ igel init -type " classification " -model " NeuralNetwork " -target " sick "
"""
$ igel init
執行該命令後,將在目前工作目錄中為您建立一個 igel.yaml 檔案。如果需要,您可以查看並修改它,否則您也可以從頭開始建立所有內容。
# model definition
model :
# in the type field, you can write the type of problem you want to solve. Whether regression, classification or clustering
# Then, provide the algorithm you want to use on the data. Here I'm using the random forest algorithm
type : classification
algorithm : RandomForest # make sure you write the name of the algorithm in pascal case
arguments :
n_estimators : 100 # here, I set the number of estimators (or trees) to 100
max_depth : 30 # set the max_depth of the tree
# target you want to predict
# Here, as an example, I'm using the famous indians-diabetes dataset, where I want to predict whether someone have diabetes or not.
# Depending on your data, you need to provide the target(s) you want to predict here
target :
- sick
在上面的範例中,我使用隨機森林根據資料集中的某些特徵對某人是否患有糖尿病進行分類,我在這個範例中使用了著名的印度糖尿病(印度糖尿病資料集)
請注意,我將n_estimators
和max_depth
作為附加參數傳遞給模型。如果您不提供參數,則將使用預設值。您不必記住每個模型的參數。您始終可以在終端機中執行igel models
,這將使您進入互動模式,系統將提示您輸入要使用的模型並輸入要解決的問題。然後,Igel 將向您顯示有關模型的資訊以及一個鏈接,您可以點擊該鏈接以查看可用參數列表以及如何使用這些參數。
在終端中執行此命令來擬合/訓練模型,您可以在其中提供資料集的路徑和yaml 檔案的路徑
$ igel fit --data_path ' path_to_your_csv_dataset.csv ' --yaml_path ' path_to_your_yaml_file.yaml '
# or shorter
$ igel fit -dp ' path_to_your_csv_dataset.csv ' -yml ' path_to_your_yaml_file.yaml '
"""
That's it. Your "trained" model can be now found in the model_results folder
(automatically created for you in your current working directory).
Furthermore, a description can be found in the description.json file inside the model_results folder.
"""
然後,您可以評估經過訓練/預先擬合的模型:
$ igel evaluate -dp ' path_to_your_evaluation_dataset.csv '
"""
This will automatically generate an evaluation.json file in the current directory, where all evaluation results are stored
"""
最後,如果您對評估結果感到滿意,則可以使用經過訓練/預先擬合的模型進行預測:
$ igel predict -dp ' path_to_your_test_dataset.csv '
"""
This will generate a predictions.csv file in your current directory, where all predictions are stored in a csv file
"""
您可以使用一個名為實驗的指令來組合訓練、評估和預測階段:
$ igel experiment -DP " path_to_train_data path_to_eval_data path_to_test_data " -yml " path_to_yaml_file "
"""
This will run fit using train_data, evaluate using eval_data and further generate predictions using the test_data
"""
您可以將經過訓練/預先擬合的 sklearn 模型匯出到 ONNX 中:
$ igel export -dp " path_to_pre-fitted_sklearn_model "
"""
This will convert the sklearn model into ONNX
"""
from igel import Igel
Igel ( cmd = "fit" , data_path = "path_to_your_dataset" , yaml_path = "path_to_your_yaml_file" )
"""
check the examples folder for more
"""
下一步是在生產中使用您的模型。 Igel 也透過提供服務命令來幫助您完成此任務。運行serve命令將告訴igel為您的模型提供服務。準確地說,igel 將自動建立 REST 伺服器並在特定主機和連接埠上為您的模型提供服務,您可以透過將這些作為 cli 選項傳遞來進行配置。
最簡單的方法是運行:
$ igel serve --model_results_dir " path_to_model_results_directory "
請注意,igel 需要--model_results_dir或簡短的 -res_dir cli 選項才能載入模型並啟動伺服器。預設情況下,igel 將在localhost:8000上為您的模型提供服務,但是,您可以透過提供主機和連接埠 cli 選項輕鬆覆寫此設定。
$ igel serve --model_results_dir " path_to_model_results_directory " --host " 127.0.0.1 " --port 8000
Igel 使用 FastAPI 建立 REST 伺服器,這是一個現代高效能框架,並使用 uvicorn 在後台運行它。
此範例是使用預訓練模型(透過運行 igel init --target起病類型分類建立的)和範例/資料下的印度糖尿病資料集完成的。原始 CSV 中的列標題為「preg」、「plas」、「pres」、「skin」、「test」、「mass」、「pedi」和「age」。
捲曲:
$ curl -X POST localhost:8080/predict --header " Content-Type:application/json " -d ' {"preg": 1, "plas": 180, "pres": 50, "skin": 12, "test": 1, "mass": 456, "pedi": 0.442, "age": 50} '
Outputs: {"prediction":[[0.0]]}
$ curl -X POST localhost:8080/predict --header " Content-Type:application/json " -d ' {"preg": [1, 6, 10], "plas":[192, 52, 180], "pres": [40, 30, 50], "skin": [25, 35, 12], "test": [0, 1, 1], "mass": [456, 123, 155], "pedi": [0.442, 0.22, 0.19], "age": [50, 40, 29]} '
Outputs: {"prediction":[[1.0],[0.0],[0.0]]}
注意事項/限制:
Python 用戶端的使用範例:
from python_client import IgelClient
# the client allows additional args with defaults:
# scheme="http", endpoint="predict", missing_values="mean"
client = IgelClient ( host = 'localhost' , port = 8080 )
# you can post other types of files compatible with what Igel data reading allows
client . post ( "my_batch_file_for_predicting.csv" )
Outputs : < Response 200 > : { "prediction" :[[ 1.0 ],[ 0.0 ],[ 0.0 ]]}
igel 的主要目標是為您提供一種無需編寫程式碼即可訓練/擬合、評估和使用模型的方法。相反,您所需要的只是在一個簡單的 yaml 檔案中提供/描述您想要執行的操作。
基本上,您在 yaml 檔案中提供描述或更確切地說配置作為鍵值對。以下是所有支援的配置的概述(目前):
# dataset operations
dataset :
type : csv # [str] -> type of your dataset
read_data_options : # options you want to supply for reading your data (See the detailed overview about this in the next section)
sep : # [str] -> Delimiter to use.
delimiter : # [str] -> Alias for sep.
header : # [int, list of int] -> Row number(s) to use as the column names, and the start of the data.
names : # [list] -> List of column names to use
index_col : # [int, str, list of int, list of str, False] -> Column(s) to use as the row labels of the DataFrame,
usecols : # [list, callable] -> Return a subset of the columns
squeeze : # [bool] -> If the parsed data only contains one column then return a Series.
prefix : # [str] -> Prefix to add to column numbers when no header, e.g. ‘X’ for X0, X1, …
mangle_dupe_cols : # [bool] -> Duplicate columns will be specified as ‘X’, ‘X.1’, …’X.N’, rather than ‘X’…’X’. Passing in False will cause data to be overwritten if there are duplicate names in the columns.
dtype : # [Type name, dict maping column name to type] -> Data type for data or columns
engine : # [str] -> Parser engine to use. The C engine is faster while the python engine is currently more feature-complete.
converters : # [dict] -> Dict of functions for converting values in certain columns. Keys can either be integers or column labels.
true_values : # [list] -> Values to consider as True.
false_values : # [list] -> Values to consider as False.
skipinitialspace : # [bool] -> Skip spaces after delimiter.
skiprows : # [list-like] -> Line numbers to skip (0-indexed) or number of lines to skip (int) at the start of the file.
skipfooter : # [int] -> Number of lines at bottom of file to skip
nrows : # [int] -> Number of rows of file to read. Useful for reading pieces of large files.
na_values : # [scalar, str, list, dict] -> Additional strings to recognize as NA/NaN.
keep_default_na : # [bool] -> Whether or not to include the default NaN values when parsing the data.
na_filter : # [bool] -> Detect missing value markers (empty strings and the value of na_values). In data without any NAs, passing na_filter=False can improve the performance of reading a large file.
verbose : # [bool] -> Indicate number of NA values placed in non-numeric columns.
skip_blank_lines : # [bool] -> If True, skip over blank lines rather than interpreting as NaN values.
parse_dates : # [bool, list of int, list of str, list of lists, dict] -> try parsing the dates
infer_datetime_format : # [bool] -> If True and parse_dates is enabled, pandas will attempt to infer the format of the datetime strings in the columns, and if it can be inferred, switch to a faster method of parsing them.
keep_date_col : # [bool] -> If True and parse_dates specifies combining multiple columns then keep the original columns.
dayfirst : # [bool] -> DD/MM format dates, international and European format.
cache_dates : # [bool] -> If True, use a cache of unique, converted dates to apply the datetime conversion.
thousands : # [str] -> the thousands operator
decimal : # [str] -> Character to recognize as decimal point (e.g. use ‘,’ for European data).
lineterminator : # [str] -> Character to break file into lines.
escapechar : # [str] -> One-character string used to escape other characters.
comment : # [str] -> Indicates remainder of line should not be parsed. If found at the beginning of a line, the line will be ignored altogether. This parameter must be a single character.
encoding : # [str] -> Encoding to use for UTF when reading/writing (ex. ‘utf-8’).
dialect : # [str, csv.Dialect] -> If provided, this parameter will override values (default or not) for the following parameters: delimiter, doublequote, escapechar, skipinitialspace, quotechar, and quoting
delim_whitespace : # [bool] -> Specifies whether or not whitespace (e.g. ' ' or ' ') will be used as the sep
low_memory : # [bool] -> Internally process the file in chunks, resulting in lower memory use while parsing, but possibly mixed type inference.
memory_map : # [bool] -> If a filepath is provided for filepath_or_buffer, map the file object directly onto memory and access the data directly from there. Using this option can improve performance because there is no longer any I/O overhead.
random_numbers : # random numbers options in case you wanted to generate the same random numbers on each run
generate_reproducible : # [bool] -> set this to true to generate reproducible results
seed : # [int] -> the seed number is optional. A seed will be set up for you if you didn't provide any
split : # split options
test_size : 0.2 # [float] -> 0.2 means 20% for the test data, so 80% are automatically for training
shuffle : true # [bool] -> whether to shuffle the data before/while splitting
stratify : None # [list, None] -> If not None, data is split in a stratified fashion, using this as the class labels.
preprocess : # preprocessing options
missing_values : mean # [str] -> other possible values: [drop, median, most_frequent, constant] check the docs for more
encoding :
type : oneHotEncoding # [str] -> other possible values: [labelEncoding]
scale : # scaling options
method : standard # [str] -> standardization will scale values to have a 0 mean and 1 standard deviation | you can also try minmax
target : inputs # [str] -> scale inputs. | other possible values: [outputs, all] # if you choose all then all values in the dataset will be scaled
# model definition
model :
type : classification # [str] -> type of the problem you want to solve. | possible values: [regression, classification, clustering]
algorithm : NeuralNetwork # [str (notice the pascal case)] -> which algorithm you want to use. | type igel algorithms in the Terminal to know more
arguments : # model arguments: you can check the available arguments for each model by running igel help in your terminal
use_cv_estimator : false # [bool] -> if this is true, the CV class of the specific model will be used if it is supported
cross_validate :
cv : # [int] -> number of kfold (default 5)
n_jobs : # [signed int] -> The number of CPUs to use to do the computation (default None)
verbose : # [int] -> The verbosity level. (default 0)
hyperparameter_search :
method : grid_search # method you want to use: grid_search and random_search are supported
parameter_grid : # put your parameters grid here that you want to use, an example is provided below
param1 : [val1, val2]
param2 : [val1, val2]
arguments : # additional arguments you want to provide for the hyperparameter search
cv : 5 # number of folds
refit : true # whether to refit the model after the search
return_train_score : false # whether to return the train score
verbose : 0 # verbosity level
# target you want to predict
target : # list of strings: basically put here the column(s), you want to predict that exist in your csv dataset
- put the target you want to predict here
- you can assign many target if you are making a multioutput prediction
筆記
igel 在底層使用 pandas 來讀取和解析資料。因此,您也可以在 pandas 官方文件中找到此資料可選參數。
下面給出了您可以在 yaml(或 json)文件中提供的配置的詳細概述。請注意,您當然不需要資料集的所有配置值。它們是可選的。一般來說,igel 會弄清楚如何讀取你的資料集。
但是,您可以透過使用此 read_data_options 部分提供額外欄位來幫助它。例如,我認為有用的值之一是“sep”,它定義了 csv 資料集中的列如何分隔。一般來說,csv資料集是用逗號分隔的,這也是這裡的預設值。但是,在您的情況下,它可能會用分號分隔。
因此,您可以在 read_data_options 中提供它。只需添加sep: ";"
在 read_data_options 下。
範圍 | 類型 | 解釋 |
---|---|---|
九月 | str,預設 ',' | 要使用的分隔符號。如果 sep 為 None,則 C 引擎無法自動偵測分隔符,但 Python 解析引擎可以,這表示將使用後者並透過 Python 內建的嗅探工具 csv.Sniffer 自動偵測分隔符號。另外,長度超過1個字元且與's+'不同的分隔符號將被解釋為正規表示式,也會強制使用Python解析引擎。請注意,正規表示式分隔符號很容易忽略引用的資料。正規表示式範例:“rt”。 |
分隔符 | 預設無 | 九月的別名 |
標頭 | int,int列表,預設'infer' | 用作列名稱的行號以及資料的開頭。預設行為是推斷列名稱:如果未傳遞名稱,則行為與 header=0 相同,並且從檔案的第一行推斷列名稱,如果明確傳遞列名稱,則行為與 header=None 相同。明確傳遞 header=0 以便能夠取代現有名稱。標頭可以是整數列表,用於指定列上多索引的行位置,例如 [0,1,3]。未指定的中間行將被跳過(例如,本例中的 2 行將被跳過)。請注意,如果skip_blank_lines=True,則該參數會忽略註解行和空白行,因此header=0表示資料的第一行而不是檔案的第一行。 |
名字 | 類似數組,可選 | 要使用的列名稱清單。如果檔案包含標題行,則應明確傳遞 header=0 來覆寫列名稱。此清單中不允許有重複項。 |
索引列 | int、str、int / str 序列或 False,預設 None | 用作 DataFrame 行標籤的列,以字串名稱或列索引給出。如果給予 int / str 序列,則使用 MultiIndex。注意:index_col=False 可用於強制 pandas 不使用第一列作為索引,例如,當您的檔案格式錯誤且每行末尾帶有分隔符號時。 |
使用列 | 類似列表或可調用,可選 | 傳回列的子集。如果是類似列表,則所有元素必須是位置元素(即文件列中的整數索引)或與使用者在名稱中提供的列名稱或從文件標題行推斷出的列名稱相對應的字串。例如,有效的類似清單的 usecols 參數將為 [0, 1, 2] 或 ['foo', 'bar', 'baz']。元素順序被忽略,因此 usecols=[0, 1] 與 [1, 0] 相同。若要從保留元素順序的資料實例化DataFrame,請對['foo', 'bar' 中的欄位使用pd.read_csv(data, usecols=['foo', 'bar'])[['foo', ' bar']] '] 順序或 pd.read_csv(data, usecols=['foo', 'bar'])[['bar', 'foo']] 為 ['bar', 'foo'] 順序。如果可調用,則將根據列名稱評估可調用函數,並傳回可調用函數評估為 True 的名稱。有效的可呼叫參數的一個例子是 ['AAA', 'BBB', 'DDD'] 中的 lambda x: x.upper()。使用此參數會導致更快的解析時間和更低的記憶體使用量。 |
擠 | 布林值,預設 False | 如果解析的資料僅包含一列,則傳回一個系列。 |
前綴 | 字串,可選 | 無標題時加到列號的前綴,例如“X”表示 X0、X1... |
mangle_dupe_cols | 布林值,預設 True | 重複的欄位將被指定為“X”、“X.1”、...“X.N”,而不是“X”...“X”。如果列中存在重複名稱,則傳入 False 將導致資料被覆寫。 |
資料類型 | {'c', 'python'},可選 | 要使用的解析器引擎。 C 引擎速度更快,而 python 引擎目前功能更完整。 |
轉換器 | 字典,可選 | 用於轉換某些列中的值的函數字典。鍵可以是整數或列標籤。 |
真實值 | 列表,可選 | 視為 True 的值。 |
假值 | 列表,可選 | 視為 False 的值。 |
跳過初始空間 | 布林值,預設 False | 跳過分隔符號後的空格。 |
跳行 | 類似列表、int 或可調用、可選 | 檔案開頭要跳過的行號(從 0 開始索引)或要跳過的行數 (int)。如果可調用,則將根據行索引評估可調用函數,如果應跳過該行則返回 True,否則返回 False。有效的可呼叫參數的一個範例是 lambda x: x in [0, 2]。 |
跳頁腳 | 整數,預設0 | 檔案底部要跳過的行數(引擎='c'不支援)。 |
行數 | 整數,可選 | 要讀取的文件行數。對於讀取大檔案很有用。 |
na_值 | 標量、str、類別列表或字典,可選 | 識別為 NA/NaN 的其他字串。如果 dict 通過,則特定的每列 NA 值。預設情況下,以下值被解釋為NaN:''、'#N/A'、'#N/AN/A'、'#NA'、'-1.#IND'、'-1.#QNAN' 、 '-NaN'、'-nan'、'1.#IND'、'1.#QNAN'、'<NA>'、'N/A'、'NA'、'NULL'、'NaN'、' n /a'、'nan'、'null'。 |
保留預設值na | 布林值,預設 True | 解析資料時是否包含預設 NaN 值。根據是否傳入 na_values,行為如下:如果 keep_default_na 為 True,並且指定了 na_values,則 na_values 會附加到用於解析的預設 NaN 值。如果 keep_default_na 為 True,且未指定 na_values,則僅使用預設 NaN 值進行解析。如果 keep_default_na 為 False,並且指定了 na_values,則僅使用 na_values 指定的 NaN 值進行解析。如果 keep_default_na 為 False,且未指定 na_values,則不會將任何字串解析為 NaN。請注意,如果 na_filter 以 False 傳入,則 keep_default_na 和 na_values 參數將被忽略。 |
na_過濾器 | 布林值,預設 True | 偵測缺失值標記(空字串和 na_values 的值)。在沒有任何NA的資料中,傳遞na_filter=False可以提高讀取大檔案的效能。 |
冗長的 | 布林值,預設 False | 指示放置在非數字列中的 NA 值的數量。 |
跳過空白行 | 布林值,預設 True | 如果為 True,則跳過空白行而不是解釋為 NaN 值。 |
解析日期 | bool 或 int 清單或名稱清單或清單清單或 dict,預設為 False | 行為如下:布林值。如果 True -> 嘗試解析索引。 int 或名稱列表。例如,如果 [1, 2, 3] -> 嘗試將第 1、2、3 列分別解析為單獨的日期列。列表的列表。例如,如果 [[1, 3]] -> 合併第 1 列和第 3 列並解析為單一日期列。 dict, 例如 {'foo' : [1, 3]} -> 將列 1, 3 解析為日期並調用結果 'foo' 如果列或索引無法表示為日期時間數組,例如由於不可解析的值或時區的混合,列或索引將作為物件資料類型傳回不變。 |
推斷日期時間格式 | 布林值,預設 False | 如果啟用 True 和 parse_dates,pandas 會嘗試推斷列中日期時間字串的格式,如果可以推斷,則切換到更快的解析方法。在某些情況下,這可以將解析速度提高 5-10 倍。 |
保留日期列 | 布林值,預設 False | 如果 True 且 parse_dates 指定組合多個列,則保留原始列。 |
日期解析器 | 功能,可選 | 用於將字串列序列轉換為日期時間實例數組的函數。預設使用 dateutil.parser.parser 進行轉換。 Pandas 將嘗試以三種不同的方式呼叫 date_parser,如果發生異常,則前進到下一個: 1) 傳遞一個或多個陣列(由 parse_dates 定義)作為參數; 2) 將 parse_dates 定義的列中的字串值連接(按行)到單一陣列中並傳遞; 3) 使用一個或多個字串(對應於 parse_dates 定義的欄位)作為參數,為每一行呼叫一次 date_parser 。 |
第一天 | 布林值,預設 False | DD/MM 格式日期、國際和歐洲格式。 |
快取日期 | 布林值,預設 True | 如果為 True,則使用唯一的已轉換日期的快取來套用日期時間轉換。解析重複的日期字串時,尤其是具有時區偏移的字串時,可能會產生顯著的加速。 |
數千 | 字串,可選 | 千位分隔符號。 |
小數 | str,預設“.” | 識別為小數點的字元(例如,使用“,”表示歐洲資料)。 |
行終止符 | str(長度1),可選 | 將文件分成行的字元。僅對 C 解析器有效。 |
轉義字符 | str(長度1),可選 | 用於轉義其他字元的單字元字串。 |
評論 | 字串,可選 | 指示不應解析該行的其餘部分。如果在行的開頭找到,則該行將完全忽略。 |
編碼 | 字串,可選 | 讀取/寫入時用於 UTF 的編碼(例如“utf-8”)。 |
方言 | str 或 csv.Dialect,可選 | 如果提供,此參數將覆蓋以下參數的值(預設或非預設):分隔符號、雙引號、轉義字元、skiinitialspace、quotechar 和引用 |
低記憶體 | 布林值,預設 True | 在內部以區塊的形式處理文件,從而在解析時減少記憶體使用,但可能會混合類型推斷。為了確保沒有混合類型,請設定 False,或使用 dtype 參數指定類型。請注意,無論如何,整個文件都會讀入單一 DataFrame, |
記憶體映射 | 布林值,預設 False | 將文件物件直接映射到記憶體並直接從那裡存取資料。使用此選項可以提高效能,因為不再有任何 I/O 開銷。 |
本節提供了完整的端到端解決方案來證明igel的功能。如前所述,您需要建立一個 yaml 設定檔。這是一個使用決策樹演算法預測某人是否患有糖尿病的端到端範例。資料集可以在範例資料夾中找到。
model :
type : classification
algorithm : DecisionTree
target :
- sick
$ igel fit -dp path_to_the_dataset -yml path_to_the_yaml_file
就是這樣,igel 現在將為您擬合模型並將其保存在當前目錄的 model_results 資料夾中。
評估預擬合模型。 Igel 將從 model_results 目錄載入預先擬合模型並為您進行評估。您只需執行評估命令並提供評估資料的路徑。
$ igel evaluate -dp path_to_the_evaluation_dataset
就是這樣! Igel 將評估模型並將統計資料/結果儲存在 model_results 資料夾內的evaluation.json檔案中
使用預先擬合的模型來預測新資料。這是由 igel 自動完成的,您只需提供要使用預測的資料的路徑。
$ igel predict -dp path_to_the_new_dataset
就是這樣! Igel 將使用預先擬合模型進行預測並將其保存在 model_results 資料夾內的predictions.csv檔案中
您也可以透過在 yaml 檔案中提供來執行一些預處理方法或其他操作。以下是一個範例,其中資料分為 80% 用於訓練,20% 用於驗證/測試。此外,資料在分割時也會被打亂。
此外,透過用平均值取代缺失值來對資料進行預處理(您也可以使用中位數、眾數等)。檢查此連結以獲取更多信息
# dataset operations
dataset :
split :
test_size : 0.2
shuffle : True
stratify : default
preprocess : # preprocessing options
missing_values : mean # other possible values: [drop, median, most_frequent, constant] check the docs for more
encoding :
type : oneHotEncoding # other possible values: [labelEncoding]
scale : # scaling options
method : standard # standardization will scale values to have a 0 mean and 1 standard deviation | you can also try minmax
target : inputs # scale inputs. | other possible values: [outputs, all] # if you choose all then all values in the dataset will be scaled
# model definition
model :
type : classification
algorithm : RandomForest
arguments :
# notice that this is the available args for the random forest model. check different available args for all supported models by running igel help
n_estimators : 100
max_depth : 20
# target you want to predict
target :
- sick
然後,您可以透過執行 igel 命令來擬合模型,如其他範例所示
$ igel fit -dp path_to_the_dataset -yml path_to_the_yaml_file
用於評估
$ igel evaluate -dp path_to_the_evaluation_dataset
用於生產
$ igel predict -dp path_to_the_new_dataset
在儲存庫的範例資料夾中,您將找到一個資料資料夾,其中儲存了著名的 indian-diabetes、iris 資料集和 linnerud(來自 sklearn)資料集。此外,每個資料夾內都有端到端範例,其中有腳本和 yaml 檔案可以幫助您入門。
indian-diabetes-example 資料夾包含兩個範例來幫助您入門:
iris-example 資料夾包含一個邏輯回歸範例,其中對目標列進行一些預處理(一種熱編碼),以向您展示 igel 的更多功能。
此外,多輸出範例包含多輸出迴歸範例。最後,cv-example 包含一個使用交叉驗證的 Ridge 分類器的範例。
您也可以在該資料夾中找到交叉驗證和超參數搜尋範例。
我建議您嘗試一下範例和 igel cli。但是,如果需要,您也可以直接執行 fit.py、evaluate.py 和 Predict.py。
首先,建立或修改根據圖像標籤/類別分類為子資料夾的圖像資料集。
假設這兩個子資料夾包含在一個名為 images 的父資料夾中,只需將資料提供給 igel:
$ igel auto-train -dp ./images --task ImageClassification
Igel 將處理從資料預處理到最佳化超參數的所有交易。最後,最佳模型將儲存在目前工作目錄中。
首先,建立或修改根據文字標籤/類別分類為子資料夾的文字資料集。
假設這兩個子資料夾包含在一個名為 texts 的父資料夾中,只需將資料提供給 igel:
$ igel auto-train -dp ./texts --task TextClassification
Igel 將處理從資料預處理到最佳化超參數的所有交易。最後,最佳模型將儲存在目前工作目錄中。
如果您不熟悉終端,也可以執行 igel UI。只需如上所述在您的電腦上安裝 igel 即可。然後在終端機中運行這個命令
$ igel gui
這將開啟 GUI,使用起來非常簡單。在此處查看 GUI 的外觀以及如何使用它的範例:https://github.com/nidhaloff/igel-ui
您可以先從 docker hub 拉取映像
$ docker pull nidhaloff/igel
然後使用它:
$ docker run -it --rm -v $( pwd ) :/data nidhaloff/igel fit -yml ' your_file.yaml ' -dp ' your_dataset.csv '
您可以透過先建立映像來在 docker 內運行 igel:
$ docker build -t igel .
然後運行它並將當前目錄(不需要是 igel 目錄)作為 /data (工作目錄)附加到容器內:
$ docker run -it --rm -v $( pwd ) :/data igel fit -yml ' your_file.yaml ' -dp ' your_dataset.csv '
如果您遇到任何問題,請隨時提出問題。此外,您可以與作者聯繫以獲取更多資訊/問題。
你喜歡伊格爾嗎?您始終可以透過以下方式幫助該專案的開發:
您認為這個專案很有用,並且想要帶來新想法、新功能、錯誤修復、擴展文件?
隨時歡迎您的貢獻。請務必先閱讀指南
麻省理工學院許可證
版權所有 (c) 2020 年至今,Nidhal Baccouri