私はSVM分類器を訓練しようとしていますが、私はMLにはかなり新しいです。私はここに2つのステップがあることを知っています:パラメータのチューニングとフィーチャエンジニアリングですが、どちらが先に行くのですか? this答えが示唆されたようですフィーチャー・エンジニアリングまず、正しいですか?それが正しい場合は、SVMパラメータのセットをランダムに選択してフィーチャエンジニアリングを実行しますか?パラメータチューニングとフィーチャエンジニアリング、いずれか最初に行う必要がありますか?
1
A
答えて
1
まず、機能エンジニアリング/機能の選択を実行する必要があります。値を調整する前に、どの変数を使用するのかを知る必要があります。
どのように機能選択を行うかは、別の質問です。 Principal Component Analysis,Singular Value Decompositionなどの技術を使用できます。これは活発な研究分野です.Googleで検索するだけで、さまざまなテクニックを説明する多くの論文を見つけることができます。
Thisは、私が最近読んだ論文で、機能の選択にエントロピーベースの技術を使用しています。
0
SVM(および他のほとんどのMLメソッド)は、2次元数値フィーチャマトリックスの形式で入力を受け入れるため、SVMを使用するにもデータをそのフォーマットに変換する必要があります。だから、機能調整の前にパラメータ調整をしてパイプラインが正しく動作することを確認してください。必ずしも完全に分離する必要はありません。
自動化またはパラメータ化されたフィーチャエンジニアリングメソッドを使用する場合、そのメソッドは、ハイパーパラメータチューニングプロシージャの一部とすることができます。
Featuretoolsは、Scikit-Learnのような機械学習ライブラリと組み合わせてPythonのオープンソースの自動フィーチャエンジニアリングライブラリを使用しています。
ここでは同じ工程でハイパーパラメータチューニングや機能のエンジニアリングを行うFeaturetoolsでデモデータセットを使用してパイプラインです:
import featuretools as ft
from featuretools.primitives import (Sum, Max, Mean, Min,
Percentile, Day, Weekend, Weekday)
from featuretools.selection import remove_low_information_features
from itertools import combinations
from sklearn.metrics import f1_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import StandardScaler, Imputer
retail_data = ft.demo.load_retail(nrows=1000)
# predict each customer's country
labels = LabelEncoder().fit_transform(retail_data['customers'].df['Country'])
def score_pipeline(max_depth, agg_primitives, trans_primitives, C):
feature_matrix, feature_defs = ft.dfs(entityset=retail_data,
target_entity='customers',
ignore_variables={'customers': ['Country']},
max_depth=max_depth,
agg_primitives=agg_primitives,
trans_primitives=trans_primitives,
verbose=True)
# one-hot encode to transform to numeric
feature_matrix, feature_defs = ft.encode_features(feature_matrix, feature_defs)
# remove feature with all nans or all single value
feature_matrix, feature_defs = remove_low_information_features(feature_matrix, feature_defs)
# impute missing values
imputer = Imputer(missing_values='NaN', strategy='mean', axis=0)
feature_matrix = imputer.fit_transform(feature_matrix)
model = SVC(C=C, verbose=True)
X_train, X_test, y_train, y_test = train_test_split(feature_matrix,
labels, test_size=0.1)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
return f1_score(y_test, predictions, average='macro')
poss_agg_primitives = [Sum, Max, Mean, Min]
poss_trans_primitives = [Percentile, Day, Weekend, Weekday]
scores = []
for agg_primitives in combinations(poss_agg_primitives, 2):
for trans_primitives in combinations(poss_trans_primitives, 2):
for max_depth in range(1, 3):
for C in [0.01, 0.1, 1.0]:
score = score_pipeline(max_depth,
agg_primitives,
trans_primitives,
C)
scores.append(score)
print("Best score: {:.3f}".format(max(scores)))
関連する問題
- 1. 要素が最初に存在するかどうか確認する必要がありますか?
- 2. TDDテストは常に最初に失敗する必要がありますか?
- 3. CardViewは常にレイアウトを最初にラップする必要がありますか?
- 4. 前、後、最初の文字と最初の行の疑似要素には、シングルコロン(:)またはダブルコロン(::)を使用する必要がありますか? MDNから
- 5. はSTARTTLSコマンド最初にJavaを発行する必要があります
- 6. ID列を表の最初の列にする必要がありますか?
- 7. アプリは最初にデフォルト言語で始める必要がありますか?
- 8. 削除はリポジトリパターンで最初に読み取る必要がありますか?
- 9. セットアップウィザードを最初に実行するか、MSIを使用する必要がありますか?
- 10. channel.htmlロケールは最初に含まれたall.jsと一致する必要がありますか?
- 11. dosプロンプトを開かずにコマンドを実行する必要があります
- 12. Rails 3、has_many:throughと:polymorphic - これを行う必要がありますか?
- 13. スローとリターンをいつ使う必要がありますか?
- 14. AWSラムダとAPIゲートウェイ - アイドル状態になります。最初の要求で「起きる」/応答がないようにする必要がありますか?
- 15. StringIO.close()を行う必要がありますか?
- 16. DestructorでDeleteCriticalSectionを行う必要がありますか?
- 17. ロボットフレームワークからPOSTリクエストを行う必要があります
- 18. 私はGitクローンを行う必要がありますか?
- 19. Reactアプリケーションのクロスブラウザテストを行う必要がありますか
- 20. どのように初期化する必要がありますか?
- 21. 最初にサイトにアクセスするときに一度だけクエリを実行する必要があります。
- 22. std :: mapは初期化する必要がありますか?
- 23. NSSetを初期化する必要がありますか?
- 24. コンストラクタの最初の行にparent :: __ construct()をコールする必要がありますか?
- 25. なぜcrcを反転させる必要がありますか?どのような場合にはこれを行う必要がありますか?
- 26. NSUserDefaultsDidChangeNotificationは、いつ実行する必要がありますか。
- 27. JS:最初の入力に値が指定されたときに動的に2番目の入力を行う必要がありますか?
- 28. Django Modelブールフィールドは、最初はチェックを外す必要があります。必須= FALSE FALSE =初期こと
- 29. 外部パラメータ名をメソッドの最初のパラメータに追加する必要がありますか?どうして?
- 30. dismissModalViewControllerAnimatedはスーパービューから削除する前に最初にアニメーション化する必要がありますか?