李宏毅先生の深層学習コースを始めたばかりで、実験の過程を記録します。
方法はできるだけコースの宿題のヒントに基づき、トリッキーなテクニックは使わず、一般的な方法を使用します。
それぞれ達成すべき指標
-
private
-
public
Simple#
コードを実行するだけで大丈夫です。
結果を提出
Medium#
特徴選択
トレーニングデータを観察すると、0 列は id で、あまり役に立たないので、これをフィルタリングするだけで大丈夫です。
feat_idx = list(range(raw_x_train.shape[1]))
feat_idx = feat_idx[1:]
結果
なんと strong の指標もクリアしました。
Strong#
Medium が Strong の指標もクリアしたので、特にモデルアーキテクチャやオプティマイザーの調整は行わず、Medium の方法を引き続き使用します。
Boss#
あまりトリッキーなテクニックは使いたくないので、以下の調整だけを行いました。
-
バッチサイズを 256 から 128 に変更(適切なバッチサイズは loss に小さなノイズを加えることに相当し、アニーリングに似ており、グローバルに一般化の良い場所に収束する機会を得ることができます)
-
モデルアーキテクチャを変更:leakyrelu と dropout を追加し、さまざまな活性化関数の学習過程は参考:一文搞懂激活函数 (Sigmoid/ReLU/LeakyReLU/PReLU/ELU) - 知乎
self.layers = nn.Sequential( nn.Linear(input_dim, 32), nn.LeakyReLU(), nn.Linear(32, 64), nn.LeakyReLU(), nn.Dropout(0.1), nn.Linear(64, 1) )
-
オプティマイザーは
optimizer = torch.optim.SGD(model.parameters(), lr=config['learning_rate'], momentum=0.9, weight_decay=config['weight_decay'])
-
特徴選択モジュール
from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import f_regression features = pd.read_csv('./covid.train.csv') x_data, y_data = features.iloc[:, 0:117], features.iloc[:, 117] #k最良の特徴を選択してみてください k = 24 selector = SelectKBest(score_func=f_regression, k=k) result = selector.fit(x_data, y_data) #result.scores_には各特徴のスコアが含まれています #np.argsortはインデックスでスコアを昇順にソートし、逆にして降順にします。 idx = np.argsort(result.scores_)[::-1] print(f'Top {k} Best feature score ') print(result.scores_[idx[:k]]) print(f'\nTop {k} Best feature index ') print(idx[:k]) print(f'\nTop {k} Best feature name') print(x_data.columns[idx[:k]]) selected_idx = list(np.sort(idx[:k])) print(selected_idx) print(x_data.columns[selected_idx])
KBest を使用したため、最初の 24 個の特徴のスコアは後の特徴のスコアを大きく上回るため、24 個を選択しました。
-
データ前処理:最大最小値正規化、参考:如何理解归一化(normalization)? - 知乎
# 正規化 x_min, x_max = x_train.min(axis=0), x_train.max(axis=0) x_train = (x_train - x_min) / (x_max - x_min) x_valid = (x_valid - x_min) / (x_max - x_min) x_test = (x_test - x_min) / (x_max - x_min)
-
パラメータ設定
config = { 'seed': 5201314, # あなたのシード番号、あなたのラッキーナンバーを選んでください。 :) 'select_all': False, # すべての特徴を使用するかどうか。 'valid_ratio': 0.2, # validation_size = train_size * valid_ratio 'n_epochs': 3000, # エポック数。 'batch_size': 128, 'learning_rate': 1e-4, 'weight_decay': 1e-4, 'early_stop': 600, # モデルがこの回数の連続エポックで改善されなかった場合、トレーニングを停止します。 'save_path': './models/model.ckpt' # あなたのモデルはここに保存されます。 }
最後に private の指標はまだ少し足りませんが、時間がかかりすぎたので、ひとまずこれでいいでしょう。この過程で一般的な方法を学べることを願っています。
boss のベースラインを達成するには、机器学习手艺人 - CSDN 博客を参考にしてください。