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

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

パーセプトロンは、バイナリ分類タスク用の線形機械学習アルゴリズムです。これは、人工ニューラル ネットワークの最初の、そして最も単純なタイプの 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

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

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

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

<<:  モバイルアプリ開発における人工知能の実装

>>:  2021年にAIが農業を改善する可能性のある10の方法

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

AIインフルエンサーはPSのみで月8万元稼げる

月収8万元の美しいネットセレブは、わずか数か月でインスタグラムのフォロワーが15万人を超えた。有名人...

インテリジェントロボットはCOVID-19パンデミックとの戦いでどのように大きな役割を果たすことができるのでしょうか?

COVID-19の流行がもたらした厳しい課題に直面して、科学技術はそれに対抗する最も強力な武器の一...

研究者らがRSA公開鍵生成アルゴリズムの脆弱性を発見

北京時間2月15日、研究者グループが、機密性の高いオンライン通信や取引を暗号化するためにRSAアルゴ...

米連邦取引委員会は、ChatGPTによるデータ漏洩と回答の捏造を含むOpenAIに対する徹底的な調査を開始した。

ワシントンポスト紙によると、7月13日、米国連邦取引委員会(FTC)はサンフランシスコに拠点を置くO...

チャットボットのテスト: フレームワーク、ツール、テクニックの詳細

【51CTO.com クイック翻訳】 [[425095]]ビジネス マーケティングの原動力と、顧客体...

...

ICRA 2022 優秀論文: 自動運転用 2D 画像を鳥瞰図に変換し、モデル認識精度を 15% 向上

自動運転における多くのタスクは、トップダウン、マップ、または鳥瞰図 (BEV) の観点から見ると、よ...

ビジネスでAIと自動化を活用する方法

業界の専門家が AI と自動化のベストプラクティスについて議論し、企業がこれらの重要な新興テクノロジ...

テクノロジーの発展により、人工知能はどれほど恐ろしいものなのでしょうか?

有名な科学者ホーキング博士の存命中、人工知能の発展は阻止されました。ホーキング博士はかつて、人工知能...

AIを活用して食材を分析し、より適切な栄養バランスを実現しましょう!

[[396039]]ビッグデータダイジェスト制作出典: Engadget編集:赤道のパンダ人工知能...

ビッグデータと AI: 3 つの実際の使用例

ビッグデータと人工知能は、企業が新しい方法で顧客体験を向上させるのに役立ちます。 AIとビッグデータ...

Foreign Media Express: 2017 年の機械学習に関する 10 の予測

[51CTO.com オリジナル記事] Foreign Media Express は、ヌカ・コーラ...

...

AIを使えばITの運用と保守が簡単になる

[[437499]]この記事はWeChatの公開アカウント「Computer World」から転載し...

機械学習モデルを使用して数十億のデータポイントの性別を予測する方法

[[327734]]ユーザーポートレートに基づいた広告は、広告効果を最適化し、精密なマーケティングを...