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

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

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億人が失業するでしょう!ビル・ゲイツの失業者へのアドバイス

ブログ    

推薦する

機械学習をサポートする 8 つのデータ ウェアハウス

[[399333]] [51CTO.com クイック翻訳]非常に大きなデータセットの場合、理想的な状...

「より深く」「より鮮明に」見る - 超高精細画像におけるディープラーニングの応用

毎日肖像画を模写する練習を続けた結果、この芸術家はいくつかの重要な特徴だけを描いた人間の顔を完全に描...

人工知能とビッグデータの隠れた危険性とは何でしょうか?

データの不足からデータの豊富さへと、近年利用可能なデータの量は飛躍的に増加し、ビッグデータはどこにで...

[ビッグガイがやってくるエピソード8] 電子商取引リスク管理ツール - モバイルデバイス向けの信頼できるID

[51CTO.com からのオリジナル記事] ライブショー「ビッグネームがやってくる」の今回のエピ...

...

パブリッククラウドが新興技術の開発をどのように促進するか

今日、クラウド コンピューティングが新興テクノロジーの主要な推進力となっていることは間違いありません...

この戦略は不安定なGANを安定させるのに役立ちます

敵対的生成ネットワーク (GAN) は、非常に幅広い応用が期待できる非常に強力なタイプのニューラル ...

概念から応用まで、人工知能の可能性

現在、AI の最大の可能性は、回帰や分類などの分析技術にあることが知られています。ニューラル ネット...

人工知能が企業コミュニケーションに及ぼす10の影響

職場にソフトウェア ロボットや人工知能 (AI) が導入されると考えると、一部の労働者は不安を感じる...

AI技術の7つの主要トレンド

[[323768]]トレンド1: 自律型デバイス自動車、ロボット、農業など、自律型デバイスは従来人間...

百度の自動運転技術は掘削機の運転を熟練ドライバーと同等の効率化に導く

海外メディアのTech Xploreによると、百度の研究ロボット工学・自動運転研究所(RAL)とメリ...

...

2021年に注目すべき10の重要なディープラーニングアルゴリズム

[[416068]] [51CTO.com クイック翻訳]人間が未来を予測することは困難ですが、人工...

成功するビジネス インテリジェンス戦略を開発する方法

ビジネス インテリジェンス戦略の策定は、企業が検討する必要がある重要なステップであり、ビジネス イン...

ディープラーニングによって変革された5つのコンピュータービジョン技術

概要: この記事では、主にコンピューター ビジョンにおける 5 つの主要テクノロジ、つまり画像分類、...