基礎 | 機械学習におけるロジスティック回帰、決定木、ニューラル ネットワーク アルゴリズムの理解

基礎 | 機械学習におけるロジスティック回帰、決定木、ニューラル ネットワーク アルゴリズムの理解

1. ロジスティック回帰

ロジスティック回帰。まず線形回帰から始めます。線形回帰の出力は実用的な意味を持つ連続値です。しかし、線形回帰では分類問題を正確かつ確実に分割することはできません。そこで、サンプルが特定のカテゴリに属する​​確率を出力で表すロジスティック回帰というアルゴリズムを設計しました。ロジスティック回帰の成功は、非常に大きくなる可能性があるθTXの元の出力範囲をシグモイド関数を通じて(0,1)にマッピングし、それによって確率推定を完了することにあります。シグモイド関数のイメージを以下に示します。

2次元空間でのロジスティック回帰の直感的な理解は、シグモイド関数の特性であり、これにより、判定閾値を平面上の判定境界にマッピングできます。もちろん、特徴が複雑になるにつれて、判定境界はさまざまな外観を持つ可能性がありますが、2種類のサンプルポイントをより適切に分離し、分類問題を解決できます。ロジスティック回帰パラメータを解く従来の方法は、勾配降下法です。コスト関数を凸関数として構築した後、偏微分方向(最も速く降下する方向)に沿って毎回小さなステップを踏み、N 回の反復後に最低点に到達します。 Scikit-Learn を使用してデータに対してロジスティック回帰分析を実行しました。 まず、特徴スクリーニングが行われます。特徴スクリーニングには多くの方法があり、主にScikit_Learnのfeature_selectionライブラリに含まれています。より簡単な方法は、F検定(f_regression)を使用して各特徴のF値とp値を与え、変数をスクリーニング(F値が大きい特徴またはp値が小さい特徴を選択)することです。次に、再帰的特徴除去(RFE)や安定性選択などの新しい方法があります。その後、選択した特徴を使用してロジスティック回帰モデルを構築できます。

再帰的特徴除去の主な考え方は、モデル(SVM や回帰モデルなど)を繰り返し構築し、最良(または最悪)の特徴(係数に基づいて選択可能)を選択し、選択した特徴を脇に置いて、残りの特徴に対してこのプロセスを繰り返すことで、すべての特徴を走査することです。 このプロセスで機能が削除される順序が機能ランキングです。 したがって、これは最適な特徴サブセットを見つけるための貪欲アルゴリズムです。 Scikit-Learn は、特徴の除去に使用できる RFE パッケージと、クロス検証を通じて特徴をランク付けするために使用できる RFECV を提供します。

コード経験

  1. pandasをpdとしてインポートする
  2.  
  3. 入力ファイル = './bankloan.xls'  
  4.  
  5. データ = pd.read_excel(入力ファイル)
  6.  
  7. データ.head()
  8.  
  9. X=data.iloc[:,:8].as_matrix()#行列をNumpy配列に変換する
  10.  
  11. Y=データ.iloc[:,8].as_matrix()
  12.  
  13. sklearn.linear_modelからLogisticRegression をLRとしてインポートします
  14.  
  15. sklearn.linear_modelからRandomizedLogisticRegression をRLRとしてインポートします。
  16.  
  17. rlr=RLR()#ランダムロジスティック回帰モデルを確立し、変数をフィルタリングする
  18.  
  19. rlr.fit(X,Y) #トレーニングモデル
  20.  
  21. rlr.get_support()#特徴スクリーニング結果を取得するか、.scores_ メソッドを通じて各特徴のスコアを取得します
  22.  
  23. x = データ.iloc[:,0:8]
  24.  
  25. X = x[x.columns[rlr.get_support()]].as_matrix() #良い特徴をフィルタリング
  26.  
  27. lr=LR()#ロジスティック回帰モデルを構築する
  28.  
  29. lr.fit(X,Y)
  30.  
  31. print( "精度: %s" % lr.score(X,Y))
  32.  
  33. x.列[rlr.get_support()]

2. 決定木

決定木: ツリー構造です (バイナリ ツリーまたは非バイナリ ツリーになります)。各非リーフ ノードは機能属性のテストを表し、各ブランチは特定の値の範囲内のこの機能属性の出力を表し、各リーフ ノードはカテゴリを格納します。決定木を使用して決定を行うプロセスは、ルート ノードから開始し、分類する項目内の対応する特徴属性をテストし、その値に応じて出力ブランチを選択してリーフ ノードに到達し、リーフ ノードに格納されているカテゴリを決定結果として使用することです。

決定木の構築: 属性選択基準を使用して、タプルを異なるクラスに分割するのに最適な属性を選択します。いわゆる決定木構築とは、各特徴属性間の位相構造を決定するために属性選択測定を実行することです。意思決定ツリーを構築する際の重要なステップは、属性を分割することです。いわゆる分割属性は、特定の特性属性の異なる区分に従って、特定のノードで異なるブランチを構築することです。その目的は、各分割サブセットを可能な限り「純粋」にすることです。可能な限り「純粋」であるということは、分割されたサブセットに分類される項目が同じカテゴリに属する​​ようにすることを意味します。属性を分割するケースは 3 つあります。

  1. 属性は離散値であり、バイナリ決定木の生成は必要ありません。このとき、属性の各区分をブランチとして使用します。
  2. 属性は離散値であり、バイナリ決定木の生成が必要です。このとき、属性区分のサブセットがテストに使用され、「このサブセットに属する」と「このサブセットに属さない」によって 2 つのブランチに分割されます。
  3. 属性は連続した値です。このとき、分割ポイント split_point として値が決定され、>split_point と <=split_point に応じて 2 つの分岐が生成されます。

決定木を構築する上で重要なことは、属性選択測定を実行することです。属性選択測定は選択分割基準です。これは、特定のクラス ラベル付きトレーニング セット D のデータを個々のクラスに「最適」に分割するヒューリスティックな方法です。これにより、トポロジ構造と分割ポイント split_point の選択が決定されます。

属性選択メトリック アルゴリズムは多数ありますが、一般的にはトップダウンの再帰分割統治法とバックトラックなしの貪欲戦略が使用されます。

コード経験

  1. pandasをpdとしてインポートする
  2.  
  3. 入力ファイル = './sales_data.xls'  
  4.  
  5. data=pd.read_excel(input_file,index_col= 'シリアル番号' )
  6.  
  7. データ[データ== "OK" ]=1
  8.  
  9. データ[データ== "はい" ]=1
  10.  
  11. データ[データ== "高" ]=1
  12.  
  13. データ[データ!=1]=-1
  14.  
  15. # 型に注意してください。上記の出力は、それがオブジェクト型であり、 int型に変換する必要があることを示しています。
  16.  
  17. X = x.as_matrix().astype( int )
  18.  
  19. Y = y.as_matrix().astype( int )
  20.  
  21. sklearn.treeからDecisionTreeClassifier をDTCとしてインポートします#分類ツリーをインポートします
  22.  
  23. dtc = DTC()
  24.  
  25. dtc.fit(X,Y)
  26.  
  27. sklearn.treeからexport_graphviz をインポート
  28.  
  29. sklearn.externals.sixからStringIO をインポートします
  30.  
  31.   open ( "tree.dot" , 'w' ) をf:として開きます。
  32.  
  33. f = export_graphviz(dtc、フィーチャー名 = x.columns、出力ファイル = f)

3. ニューラルネットワーク

人工ニューラルネットワーク (ANN)

人工ニューラル ネットワーク (ANN) は、1980 年代から人工知能の分野で研究のホットスポットとなっています。人間の脳の神経ネットワークを情報処理の観点から抽象化し、シンプルなモデルを構築し、異なる接続方法に応じて異なるネットワークを形成します。工学や学術の世界では、単にニューラル ネットワークまたは準ニューラル ネットワークと呼ばれることがよくあります。ニューラル ネットワークは、多数の相互接続されたノード (またはニューロン) で構成される計算モデルです。各ノードは、活性化関数と呼ばれる特定の出力関数を表します。各 2 つのノード間の接続は、接続を通過する信号の重み値 (重みと呼ばれます) を表します。これは、人工ニューラル ネットワークのメモリに相当します。ネットワークの出力は、ネットワークの接続方法、重み値、活性化関数によって異なります。ネットワーク自体は、通常、自然界の何らかのアルゴリズムまたは関数の近似値ですが、論理的な戦略の表現である場合もあります。

Keras の紹介

Keras: Python ベースのディープラーニング ライブラリ

Keras は高レベルのニューラル ネットワーク API です。Keras は純粋な Python で記述されており、Tensorflow、Theano、CNTK バックエンドに基づいています。 Keras は迅速な実験をサポートするために誕生し、アイデアを素早く結果に変換できます。

共通モジュールの紹介:

1. オプティマイザー

パッケージ: keras.optimizers:

これは、SGD、Adagrad、Adadelta、RMSprop、Adam などの最適化方法を選択するために使用されます。

2.目的

パッケージ: keras.objectives

このモジュールは主にニューラルネットワークに損失関数、つまりターゲット関数を追加する役割を担っています。

これは、最適化に使用されるエラーの形式を定義します。

mean_squared_error/mse: 平均二乗誤差

平均絶対誤差 / mae: 絶対誤差

mean_absolute_percentage_error / mape: 平均絶対パーセンテージ差

平均二乗対数誤差 / msle: 対数誤差

スクエアヒンジ

ヒンジ

binary_crossentropy: logloss とも呼ばれます。

categorical_crossentropy: この目的関数を使用するには、ラベルをバイナリ配列の形式で設定する必要があります。

3.モデル

パッケージ: keras.models これはKerasのメインモジュールであり、さまざまなコンポーネントを組み立てるために使用されます。

keras.modelからSequentialをインポート

model = keras.models.Sequential() はニューラルネットワークを初期化します

model.add(......)#アセンブリのメソッドを追加

4.レイヤー

パッケージ: keras.layers

このモジュールは主に、コア層、畳み込み層など、さまざまなタイプを含むニューラル ネットワーク層を生成するために使用されます。

keras.layersからDenseをインポート

model.add(Dense(input_dim=3,output_dim=5)#隠し層を追加

5. 初期化

パッケージ: keras.initializations

このモジュールは主にモデル パラメータ (重み) を初期化する役割を担います。初期化方法には、uniform、lecun_uniform、normal、orthogonal、zero、glorot_normal、he_normal などがあります。

model.add(Dense(input_dim=3,output_dim=5,init='uniform')) #初期化(uniform)で隠し層を追加

6.アクティベーション

パッケージ: keras.activations、keras.layers.advanced_activations (新しい活性化関数)

このモジュールは主に、線形、シグモイド、ハードシグモイド、tanh、ソフトプラス、relu、ソフトプラス、LeakyReLUなどの活性化関数やその他の新しい活性化関数をニューラル層に追加する役割を担っています。

Keras のシーケンシャル モデル

Keras のコアデータ構造は「モデル」であり、これはネットワーク層を整理する方法です。 Keras の主なモデルは、一連のネットワーク層が順番に並んだスタックである Sequential モデルです。より複雑なモデルの構築方法を学ぶには、機能モデルもご覧ください。

シーケンシャルモデルは次のとおりです。

  1. keras.modelsからSequentialをインポートする
  2.  
  3. モデル = シーケンシャル()

.add() を介していくつかのネットワーク レイヤーを積み重ねると、モデルが形成されます。

  1. keras.layersからDenseをインポートし、Activation
  2.  
  3. model.add (高密度(単位=64、入力次元=100))
  4.  
  5. model.add(アクティベーション( "relu" ))
  6.  
  7. model.add (密(単位=10))
  8.  
  9. model.add(アクティベーション( "softmax" ))

モデルの構築が完了したら、.compile() メソッドを使用してモデルをコンパイルする必要があります。

  1. model.compile(損失= 'categorical_crossentropy' 、オプティマイザー= 'sgd' 、メトリック=[ 'accuracy' ])

モデルをコンパイルする際には、損失関数とオプティマイザーを指定する必要があります。必要に応じて、損失関数を自分でカスタマイズすることもできます。 Keras のコアコンセプトは、シンプルで使いやすく、ユーザーが Keras を完全に制御できるようにすることです。ユーザーは独自のモデルやネットワーク レイヤーをカスタマイズしたり、必要に応じてソース コードを変更したりすることもできます。

  1. keras.optimizersからSGDをインポートする
  2.  
  3. model.compile(loss= 'categorical_crossentropy' 、optimizer=SGD(lr=0.01、momentum=0.9、nesterov= True ))

モデルがコンパイルされた後、トレーニング データに対してバッチで一定数の反復処理を実行してネットワークをトレーニングします。

  1. モデルをフィット(x_train、y_train、エポック=5、バッチサイズ=32)

もちろん、トレーニングのために手動でデータのバッチをネットワークに送信することもできます。この場合、model.train_on_batch(x_batch, y_batch)を使用する必要があります。

次に、1 行のコードを使用してモデルを評価し、モデルのインジケーターが要件を満たしているかどうかを確認します。

  1. loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)

あるいは、モデルを使用して新しいデータに関する予測を行うこともできます。

  1. クラス = model.predict(x_test, batch_size=128)

質問応答システム、画像分類モデル、ニューラルチューリングマシン、または word2vec 単語埋め込みをそれほど速く構築できます。ディープラーニングの基本的な考え方はシンプルです。私たちもシンプルにしましょう。

コード経験

  1. pandasをpdとしてインポートする
  2.  
  3. #データを読み取る
  4.  
  5. 入力ファイル = './sales_data.xls'  
  6.  
  7. data=pd.read_excel(input_file,index_col= 'シリアル番号' )
  8.  
  9. #データのカテゴリラベルをデータに変換する
  10.  
  11. データ[データ== '良好' ]=1
  12.  
  13. データ[データ== 'はい' ]=1
  14.  
  15. データ[データ== '高' ]=1
  16.  
  17. データ[データ!=1]=0
  18.  
  19. x=data.iloc[:,:3].as_matrix().astype( int )#トレーニングセットを選択し、行列形式に変換し、型に注意してください
  20.  
  21. y = data.iloc[:,3].as_matrix().astype( int )
  22.  
  23. keras.modelsからSequentialをインポートする
  24.  
  25. keras.layers.coreからDense,Activation をインポートします
  26.  
  27. model=Sequential()#モデルの構築
  28.  
  29. モデルを追加します(Dense(input_dim=3,output_dim=10))
  30.  
  31. model.add ( Activation ( 'relu' ))#活性化関数としてreluを使用する
  32.  
  33. モデルを追加します(Dense(input_dim=10,output_dim=1))
  34.  
  35. model.add (Activation( ' sigmoid' ))#出力分類0または1
  36.  
  37. model.compile(損失 = 'binary_crossentropy' 、オプティマイザー = 'adam' )
  38.  
  39. model.fit(x,y,nb_epoch = 1000, batch_size = 10) #モデルをトレーニングし、1000回学習します yp=model.predict_classes(x).reshape(len(y)) #分類予測
  40.  
  41. yp = model.predict_classes(x).reshape(len(y)) #分類予測
  42.  
  43. import matplotlib.pyplot as plt #描画ライブラリをインポートする
  44.  
  45. from sklearn.metrics importfusion_matrix #混同行列関数をインポートする
  46.  
  47. cm_plot(y, yp)を定義します。
  48.  
  49. cm =fusion_matrix(y, yp) # 混同行列
  50.  
  51. plt.matshow(cm, cmap=plt.cm.Greens) #混同行列図を描画します。カラースタイルは cm.Greens を使用します。その他のスタイルについては、公式 Web サイトを参照してください。
  52.  
  53. plt.colorbar() #カラーラベル
  54.  
  55. for x in range(len(cm)): #データラベル
  56.  
  57. y範囲(長さ(cm))内にある場合:
  58.  
  59. plt.annotate(cm[x,y], xy=(x, y), 水平位置合わせ= 'center' 、垂直位置合わせ= 'center' )
  60.  
  61. plt.ylabel( '真のラベル' ) #軸ラベル
  62.  
  63. plt.xlabel( '予測ラベル' ) #軸ラベル
  64.  
  65. リターンplt
  66.  
  67. cm_plot(y,yp).show() #混同行列の可視化結果を表示する

図からわかるように、テスト サンプルは 34 個、正しい予測は 26 個、予測精度は 76.4% です。予測精度が低いのは、ニューラル ネットワークのトレーニングに必要なサンプル数が多いためであり、ここではトレーニング データが少ないことが原因です。

ここでのケースは比較的単純であり、過剰適合の問題は考慮されていないことに注意する必要があります。実際、ニューラル ネットワークの適合能力は非常に強力であり、過剰適合が発生しやすくなります。 「ペナルティ項」を追加する従来の方法とは異なり、ニューラル ネットワーク (特にディープ ニューラル ネットワーク) のオーバーフィッティングを防ぐ一般的な方法は、一部のニューラル ネットワーク ノードをランダムにスリープ状態にすること、つまりドロップアウトすることです。ドロップアウトについては、http://mp.weixin.qq.com/s/OB3xBKWHH1lAo-yBdlJVFg の記事を参照してください。

参考文献:

1. http://blog.csdn.net/han_xiaoyang/article/details/49123419

2. https://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html

3. Pythonによるデータ分析とマイニングの実践

4. http://www.coin163.com/it/x7874130266141340969

5. http://keras-cn.readthedocs.io/en/latest/

<<:  深層強化学習とは:次世代のAIと深層学習

>>:  2030年までに、人工知能のせいで世界中で8億人が失業するでしょう!ビル・ゲイツの失業者へのアドバイス

ブログ    
ブログ    

推薦する

...

...

次世代の自動運転システムには大規模なモデルが必要であり、システムの研究がここにある

大規模言語モデル (LLM) とビジュアル グラウンデッド モデル (VFM) の出現により、大規模...

AI を活用して建設現場の活動を監視

[[348520]]建設現場は、人々とピースが適切なタイミングで組み合わさる必要がある巨大なパズルの...

世界動物の日: 動物保護と機械学習が出会うとき

動物を愛し、動物保護に尽力する世界中の人々にとって、今日は特別な日、「世界動物の日」です。毎年10月...

中国チームは、自分たちが作るペイントトランスフォーマーを提案した。ネットユーザー:これもニューラルネットワークの使用が必要です

ニューラル ネットワークが優れた画家であることは周知の事実です。スケッチを風景画に変えたり、異なるス...

WeChat、サードパーティのエコシステムに統合するインテリジェント会話システム「Xiaowei」を発表

2019年WeChatオープンクラスPROで、WeChat AIチームが開発したインテリジェント対話...

...

北京大学、バイトダンス等は増分学習を用いたスーパーピクセルセグメンテーションモデルLNSNetを提案した

オンライン学習によって引き起こされる壊滅的な忘却問題を解決するために、北京大学などの研究機関は、勾配...

ボストン・ダイナミクスがマスク氏を激しく批判、それは単なる自慢なのか、それとも現実なのか?テスラロボットに関する3つの大きな推測

テスラのロボットに関しては、まず主要なタイムラインを確認しましょう。実際、テスラのロボットの構想は1...

人工知能が金融を変える5つの方法

人工知能 (AI)、機械学習 (ML)、ディープニューラルネットワーク (DNN) は、金融業界のビ...

過大評価された5つのテクノロジー:誇大宣伝の裏にある現実を探る

すべてのテクノロジーが期待通りの成果を上げたり、当初の約束を果たしたりするわけではありません。技術進...

無料ですか?寄生? ChatGPTに夢中です!

51CTOウェブサイトコンテンツ調査に参加するにはクリックしてくださいマット・アセイ編纂者:Qia...

AIは人間の教師に取って代わるでしょうか?どれだけの能力があるのか​​を確かめるためにレッスンを受けました

少し前に、「ピーター」と「トニー」という名前の二人の英語教師が人々の注目を集めました。彼らはあらゆる...

...