Strive236

Strive236

生命的起伏要认可
github
zhihu

ML2022春 HW1

李宏毅先生の深層学習コースを始めたばかりで、実験の過程を記録します。
方法はできるだけコースの宿題のヒントに基づき、トリッキーなテクニックは使わず、一般的な方法を使用します。

1

それぞれ達成すべき指標

  • private

    image

  • public

    image

Simple#

コードを実行するだけで大丈夫です。

2

結果を提出

3

Medium#

特徴選択
トレーニングデータを観察すると、0 列は id で、あまり役に立たないので、これをフィルタリングするだけで大丈夫です。

feat_idx = list(range(raw_x_train.shape[1]))
feat_idx = feat_idx[1:]

結果

4

5
なんと 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)? - 知乎

    6

    # 正規化
    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 の指標はまだ少し足りませんが、時間がかかりすぎたので、ひとまずこれでいいでしょう。この過程で一般的な方法を学べることを願っています。

7

8

boss のベースラインを達成するには、机器学习手艺人 - CSDN 博客を参考にしてください。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。