Python ベースのパーセプトロン分類アルゴリズムの実践

Python ベースのパーセプトロン分類アルゴリズムの実践

[[374354]]

パーセプトロンは、バイナリ分類タスク用の線形機械学習アルゴリズムです。これは、人工ニューラル ネットワークの最初の、そして最も単純なタイプの 1 つと考えることができます。確かに「ディープ」ラーニングではありませんが、重要な要素です。ロジスティック回帰と同様に、2 クラス分類タスクの特徴空間における線形分離を迅速に学習できますが、ロジスティック回帰とは異なり、確率的勾配降下最適化アルゴリズムを使用して学習し、キャリブレーション確率を予測しません。

このチュートリアルでは、パーセプトロン分類機械学習アルゴリズムについて説明します。このチュートリアルを完了すると、次のことが分かります。

  • パーセプトロン分類器は、バイナリ分類タスクに適用できる線形アルゴリズムです。
  • Scikit-Learn でパーセプトロン モデルを使用して適合、評価、予測を行う方法。
  • 特定のデータセットでパーセプトロン アルゴリズムのハイパーパラメータを調整する方法。

チュートリアルの概要

このチュートリアルは 3 つのパート、合計 3 つのセクションに分かれています。彼らです:

  • パーセプトロンアルゴリズム
  • Scikit-learn によるパーセプトロン
  • ピッチパーセプトロンハイパーパラメータ

パーセプトロンアルゴリズム

パーセプトロン アルゴリズムは、2 クラス (バイナリ) 分類機械学習アルゴリズムです。これはニューラル ネットワーク モデルであり、おそらく最も単純なタイプのニューラル ネットワーク モデルです。これは、データの行を入力として受け取り、クラス ラベルを予測する単一のノードまたはニューロンで構成されます。これは、入力の加重合計とバイアス (1 に設定) を計算することによって実現できます。モデルの入力の加重合計はアクティベーションと呼ばれます。

活性化 = 重み * 入力 + バイアス

活性化が 0.0 を超える場合、モデルは 1.0 を出力します。それ以外の場合、モデルは 1.0 を出力します。それ以外の場合は0.0が出力されます。

予測1: 活性化 > 0.0の場合

予測0: 活性化 <= 0.0の場合

入力に線形回帰やロジスティック回帰などのモデル係数が乗算されていると仮定すると、モデルを使用する前にデータを正規化または標準化することをお勧めします。パーセプトロンは線形分類アルゴリズムです。これは、特徴空間内の線 (超平面と呼ばれる) を使用して 2 つのクラスを分離する決定境界を学習することを意味します。したがって、クラスを線形または線形モデルによって適切に分離できる問題 (線形分離可能と呼ばれる) に適しています。このモデルの係数は入力重みと呼ばれ、確率的勾配降下法最適化アルゴリズムを使用してトレーニングされます。トレーニング データセットの例が 1 つずつモデルに表示され、モデルは予測を行ってエラーを計算します。次に、その例のエラーを減らすためにモデルの重みが更新されます。これはパーセプトロン更新規則と呼ばれます。このプロセスは、トレーニング データセット内のすべての例 (エポックと呼ばれる) に対して繰り返されます。その後、例を使用してモデルを更新するプロセスが何度も繰り返されます。各バッチでは、モデルの重みを更新するためにエラーのより小さな割合が使用され、この割合は学習率と呼ばれるハイパーパラメータによって制御されます。学習率は通常、小さな値に設定されます。これは、学習があまりに速く行われず、モデルの重みの最適化 (検索) プロセスの早期収束と呼ばれる潜在的に低いスキル レベルに陥らないようにするためです。

重み(t+1) = 重み(t) + 学習率 * (期待値i – 予測値) * 入力値i

モデルによって生成されたエラーが低いレベルに低下するか改善が停止するか、最大数のエポックが実行されると、トレーニングは停止します。

モデルの重みの初期値は小さなランダム値に設定されます。さらに、トレーニング データセットは各トレーニング エポックの前にシャッフルされます。これは、モデルのトレーニング プロセスを高速化し、改善するために設計されています。したがって、学習アルゴリズムは確率的であり、実行されるたびに異なる結果が得られます。したがって、繰り返し評価を行ってデータセットに対するアルゴリズムのパフォーマンスを要約し、平均分類精度を報告することが推奨されます。学習率とトレーニング エポック数はアルゴリズムのハイパーパラメータであり、ヒューリスティックまたはハイパーパラメータ チューニングを使用して設定できます。

パーセプトロン アルゴリズムについて理解できたので、このアルゴリズムを Python で使用する方法を調べてみましょう。

パーセプトロンとScikit-Learn

パーセプトロン アルゴリズムは、Perceptron クラスを通じて scikit-learn Python 機械学習ライブラリで利用できます。このクラスを使用すると、学習率 (eta0) を設定できます。デフォルトでは 1.0 に設定されます。

  1. # モデルを定義する 
  2. モデル=パーセプトロン( eta0 = 1 .0)

この実装では、トレーニング エポックの合計数 (max_iter) を構成することもできます。デフォルトでは 1,000 に設定されます。

  1. # モデルを定義する 
  2. モデル=パーセプトロン( max_iter = 1000 )

パーセプトロン アルゴリズムの scikit-learn 実装では、早期停止やペナルティ損失の使用など、検討したいその他の構成オプションも提供されます。実際の例を使用して、パーセプトロン分類器を実証することができます。まず、合成分類データセットを定義しましょう。 make_classification() 関数を使用して、それぞれ 20 個の入力変数を持つ 1,000 個の例のデータセットを作成します。この例では、データセットを作成して要約します。

  1. # テスト分類データセット 
  2. sklearn.datasets から make_classification をインポートします 
  3. #データセットを定義する 
  4. X, y = make_classification ( n_samples = 1000 n_features = 10 n_informative = 10 n_redundant = 0 random_state = 1 )  
  5. # データセットを要約する 
  6. print(X.shape, y.shape)

例を実行するとデータセットが作成され、データセット内の行と列の数が確認されます。

  1. (1000, 10) (1000,)

RepeatedStratifiedKFold クラスを使用して、繰り返し層別 k 分割クロス検証を使用してパーセプトロン モデルを適合および評価できます。テスト設定では、10 回の折り畳みと 3 回の反復を使用します。

  1. # モデルを作成する 
  2. モデル=パーセプトロン()

合成バイナリ分類タスク用のパーセプトロン モデルを評価する完全な例を以下に示します。

  1. # データセット上でパーセプトロンモデルを評価する 
  2. numpyからの平均をインポート 
  3. numpyからstdをインポート 
  4. sklearn.datasets から make_classification をインポートします 
  5. sklearn.model_selection から cross_val_score をインポートします 
  6. sklearn.model_selection から RepeatedStratifiedKFold をインポートします 
  7. sklearn.linear_model から Perceptron をインポートします 
  8. #データセットを定義する 
  9. X, y = make_classification ( n_samples = 1000 n_features = 10 n_informative = 10 n_redundant = 0 random_state = 1 )  
  10. # モデルを定義する 
  11. モデル=パーセプトロン()  
  12. # モデル評価方法を定義する 
  13. cv = RepeatedStratifiedKFold ( n_splits = 10 n_repeats = 3 random_state = 1 )繰り返し階層化Kフォールド 
  14. # モデルを評価する 
  15. スコア= cross_val_score (モデル、X、y、スコアリング= '精度' cv cv =cv、 n_jobs =-1)  
  16. # 結果を要約する 
  17. print('平均精度: %.3f (%.3f)' % (mean(scores), std(scores)))

この例を実行すると、合成データセットでパーセプトロン アルゴリズムが評価され、10 倍のクロス検証の 3 回の反復にわたる平均精度が報告されます。学習アルゴリズムの確率的性質を考慮すると、結果は異なる場合があります。例を数回実行することを検討してください。この場合、モデルの平均精度は約 84.7% を達成していることがわかります。

  1. 平均精度: 0.847 (0.052)

最終モデルとしてパーセプトロン分類器を使用し、新しいデータに対して予測を行うことに決めるかもしれません。これは、利用可能なすべてのデータにモデル パイプラインを適合させ、新しいデータ行を渡して predict() 関数を呼び出すことによって実現できます。以下に示す完全な例でこれを実証できます。

  1. # データセットに対してパーセプトロンモデルで予測を行う 
  2. sklearn.datasets から make_classification をインポートします 
  3. sklearn.linear_model から Perceptron をインポートします 
  4. #データセットを定義する 
  5. X, y = make_classification ( n_samples = 1000 n_features = 10 n_informative = 10 n_redundant = 0 random_state = 1 )  
  6. # モデルを定義する 
  7. モデル=パーセプトロン()  
  8. # 適合モデル 
  9. モデル.fit(X, y)  
  10. # 新しいデータを定義する 
  11. = [0.12777556,-3.64400522,-2.23268854,-1.82114386,1.75466361,0.1243966,1.03397657,2.35822076,1.01001752,0.56768485]  
  12. # 予測する 
  13. yhat = model.predict ([行])  
  14. # 予測を要約する 
  15. print('予測クラス: %d' % yhat)

例を実行すると、モデルが適合され、新しいデータ行のクラス ラベル予測が行われます。

  1. 予測クラス: 1

次に、モデルのハイパーパラメータの設定について見てみましょう。

パーセプトロンハイパーパラメータの調整

パーセプトロン アルゴリズムのハイパーパラメータは、特定のデータセットに合わせて設定する必要があります。おそらく最も重要なハイパーパラメータは学習率です。学習率を高くするとモデルの学習速度は速くなりますが、スキルが低下する可能性があります。学習率が小さいほどモデルのパフォーマンスは向上しますが、モデルのトレーニングには長い時間がかかる可能性があります。学習率の調査の詳細については、次のチュートリアルをご覧ください: ディープラーニング ニューラル ネットワークをトレーニングするときに学習率を構成する方法 学習率は通常、1e-4 (またはそれ以下) や 1.0 などの小さな対数スケールでテストされます。この場合、次の値をテストします。

  1. #グリッドを定義する 
  2. グリッド=辞書()  
  3. グリッド['eta0'] = [0.0001, 0.001, 0.01, 0.1, 1.0]

次の例では、GridSearchCV クラスと定義した値のグリッドを使用してこれを示します。

  1. # パーセプトロンのグリッドサーチ学習率 
  2. sklearn.datasets から make_classification をインポートします 
  3. sklearn.model_selection から GridSearchCV をインポートします 
  4. sklearn.model_selection から RepeatedStratifiedKFold をインポートします 
  5. sklearn.linear_model から Perceptron をインポートします 
  6. #データセットを定義する 
  7. X, y = make_classification ( n_samples = 1000 n_features = 10 n_informative = 10 n_redundant = 0 random_state = 1 )  
  8. # モデルを定義する 
  9. モデル=パーセプトロン()  
  10. # モデル評価方法を定義する 
  11. cv = RepeatedStratifiedKFold ( n_splits = 10 n_repeats = 3 random_state = 1 )繰り返し階層化Kフォールド 
  12. #グリッドを定義する
  13. グリッド=辞書()  
  14. グリッド['eta0'] = [0.0001, 0.001, 0.01, 0.1, 1.0]  
  15. #検索の定義 
  16. 検索= GridSearchCV (モデル、グリッド、スコアリング= '精度' cv cv =cv、 n_jobs =-1)  
  17. # 検索を実行する 
  18. 結果=検索.fit(X, y)  
  19. # 要約 
  20. print('平均精度: %.3f' % results.best_score_)  
  21. print('設定: %s' % results.best_params_)  
  22. # すべてを要約する
  23. 平均=結果.cv_results_['mean_test_score']  
  24. パラメータ= results.cv_results _['パラメータ']  
  25. zip(means, params) の mean, param の場合:  
  26. print(" > %.3f with: %r" % (mean, param))

例を実行すると、繰り返しクロス検証を使用して各構成の組み合わせが評価されます。学習アルゴリズムの確率的性質を考慮すると、結果は異なる場合があります。例を数回実行してみてください。この場合、学習率がデフォルトよりも小さいほどパフォーマンスが向上することがわかります。学習率 0.0001 と 0.001 はどちらも約 85.7% の分類精度を達成し、デフォルト値の 1.0 では約 84.7% の精度を達成します。

  1. 平均精度: 0.857  
  2. 設定: {'eta0': 0.0001}  
  3. > 0.857、{'eta0': 0.0001}  
  4. > 0.857、{'eta0': 0.001}  
  5. > 0.853、{'eta0': 0.01}  
  6. > 0.847、{'eta0': 0.1}  
  7. > 0.847、{'eta0': 1.0}

もう 1 つの重要なハイパーパラメータは、モデルのトレーニングに使用するエポックの数です。これはおそらくトレーニング データセットに依存し、大きく異なる可能性があります。ここでも、1 から 1e+4 までの対数スケールで構成値を調べます。

  1. #グリッドを定義する 
  2. グリッド=辞書()  
  3. グリッド['max_iter'] = [1, 10, 100, 1000, 10000]

前回の検索からの良好な学習率 0.0001 を使用します。

  1. # モデルを定義する 
  2. モデル=パーセプトロン( eta0 =0.0001)

グリッドでトレーニング エポックの数を検索する完全な例を以下に示します。

  1. # パーセプトロンのグリッド検索合計エポック 
  2. sklearn.datasets から make_classification をインポートします 
  3. sklearn.model_selection から GridSearchCV をインポートします 
  4. sklearn.model_selection から RepeatedStratifiedKFold をインポートします 
  5. sklearn.linear_model から Perceptron をインポートします 
  6. #データセットを定義する 
  7. X, y = make_classification ( n_samples = 1000 n_features = 10 n_informative = 10 n_redundant = 0 random_state = 1 )  
  8. # モデルを定義する 
  9. モデル=パーセプトロン( eta0 =0.0001)  
  10. # モデル評価方法を定義する 
  11. cv = RepeatedStratifiedKFold ( n_splits = 10 n_repeats = 3 random_state = 1 )繰り返し階層化Kフォールド 
  12. #グリッドを定義する 
  13. グリッド=辞書()  
  14. グリッド['max_iter'] = [1, 10, 100, 1000, 10000]  
  15. #検索の定義
  16. 検索= GridSearchCV (モデル、グリッド、スコアリング= '精度' cv cv =cv、 n_jobs =-1)  
  17. # 検索を実行する 
  18. 結果=検索.fit(X, y)  
  19. # 要約 
  20. print('平均精度: %.3f' % results.best_score_)  
  21. print('設定: %s' % results.best_params_)  
  22. # すべてを要約する 
  23. 平均=結果.cv_results_['mean_test_score']  
  24. パラメータ= results.cv_results _['パラメータ']  
  25. zip(means, params) の mean, param の場合:  
  26. print(" > %.3f with: %r" % (mean, param))

例を実行すると、繰り返しクロス検証を使用して各構成の組み合わせが評価されます。学習アルゴリズムの確率的な性質を考慮すると、結果は異なる場合があります。例を数回実行してみてください。この場合、分類精度は 10 から 10,000 までほぼ同じであることがわかります。興味深い例外としては、学習率とトレーニング エポック数の両方を構成して、より良い結果が得られるかどうかを確認することが挙げられます。

  1. 平均精度: 0.857  
  2. 設定: {'max_iter': 10}  
  3. > 0.850 の場合: {'max_iter': 1}  
  4. > 0.857、{'max_iter': 10}  
  5. > 0.857、{'max_iter': 100}  
  6. > 0.857、{'max_iter': 1000}  
  7. > 0.857、{'max_iter': 10000}

<<:  COVID-19パンデミックは顔認識技術の導入を促進している

>>:  OpenAI が 120 億のパラメータを持つ魔法のモデルをリリース!テキスト合成された画像は、まるで人間の言語想像力を持っているかのようにリアルである。

推薦する

この遠隔操作脳実験は成功したが、ネットユーザーを怖がらせた

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

Megvii Technologyがロボット協調ネットワーク頭脳「Hetu」をリリース、エコシステムの改善に20億元を投資

現在、モノのインターネットの将来の発展方向は非常に明確であり、それが AIoT です。 AIは頭脳で...

...

陳作寧院士:人工知能モデルとアルゴリズムの7つの発展傾向

新しいものに直面したとき、あなたはそれに適応しますか、学びますか、拒否しますか、それとも無視しますか...

機械学習: 具体的なカテゴリーは何ですか?プロジェクトのプロセスはどのようなものですか?

機械学習と人工知能は近年最もホットなキーワードの 1 つであるはずです。今日は機械学習の基礎知識をい...

北京交通大学がソースの交通モデル TransGPT·Zhiyuan をオープン、商用利用は無料

半年以上にわたる好調なビジネスを経て、国内の大型モデル分野は中盤戦に突入し、長年垂直分野に深く関わっ...

烏鎮百度脳オープンデーが開催、EasyDL業界インテリジェンスイノベーションコンペティションを開始

顔認識技術はAI時代に利便性をもたらすだけでなく、効率も向上させます。 8月21日、百度ブレインオー...

10億ピクセル画像のマルチスケール特性評価のためのスタンフォード大学の新しいニューラルシーン表現方法がSIGGRAPHに選出されました

現在、ニューラル表現は、レンダリング、イメージング、幾何学モデリング、シミュレーション アプリケーシ...

...

Yunqi CapitalのChen Yu氏:AI投資家を惹きつけてターゲットにする方法

[51CTO.comより引用] 2017年7月21日から22日まで、51CTO主催の人工知能をテーマ...

すべての IT リーダーが議論すべき 6 つの難しい AI に関する議論

AIほど多くの議論や論争を巻き起こした技術はほとんどなく、労働者、著名な経営者、世界の指導者たちは、...

人工知能と新しい小売業が出会うと、どのような火花が散るでしょうか?

過去1年間、人間と機械の戦いは続き、人工知能への注目は最高潮に達し、あらゆる分野で人工知能が見られる...

韓信は本当に数学の達人なのでしょうか?古代中国の数学にヒントを得たコンピュータ暗号化アルゴリズム

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...