【機械学習・データ分析を勉強している方必見】オススメの本2選!
こんにちは!EMです^^
今回は私が最近読んだ機械学習系の本を紹介していきたいと思います!
サイトで検索する事も、勉強にはかかせませんが
やはり本を読むと、全体的の流れがつかみやすいのと
情報の中身がかなり安定しているので、信頼できる情報が多いです。
サイトの中には最新の情報もあれば、古い情報もありますからね。
ということで、私の好みで選んだ
めっちゃ分かりやすくて為になると思った本を2冊紹介します!!
まずはこちら↓↓
とそれぞれ起こりうる問題や解決策を、実務目線でまとめてくれています。
実際の現場でどのような依頼を受けるのかは未知なんですよね。
照らし合わせて使える内容ばかりだったので、とても重宝しています。
データサイエンティストがこんな事をしているというイメージを掴むためにも
ぜひ読んでみてほしい一冊です!
さて、次の本にいきましょう。
過言ではありません!(個人的な意見です)
きっちりまとめてくれています!
一度で理解するのはむずかしいかもしれません。
「この内容を理解したいから、この単語を調べてみよう!」という
何が分からないかを明らかにしてくれる、基礎固めのとっかかりが出来る本かな
と思っています。
私は1冊目の本から疑問があれば、2冊目の本で調べて
分からないところを時間をかけても理解していく、という勉強をしています。
パソコン版でみると、メモやハイライトを残したりできる機能が使えず
やはり紙の方が付箋とか使えて使いやすいなぁと感じました。
電車などの通勤時間に見て勉強はしやすいです。
分類アルゴリズム~決定木④アンサンブル手法~
こんにちは!EMです^^
今回も引き続き決定木シリーズを解説していきます!
メインのテーマはアンサンブル手法です!
アンサンブル手法(Ensemble methods)
ランダムフォレスト:
たくさんの決定木を並行して構築し、多数決を使用して
出力を1つのモデルにかしこく結合します。
合計データのサブセット(サンプリング)が各決定木に使用され
最後に集計(バギング:bagging)が行われてすべてがまとめられます。
ブーストツリー:
たくさんの決定木を連続して構築します。
後続のモデルは、前のモデルのエラーを元に構築されます。
この構成では、前のモデルで捉えられなかった効果に追加のモデルが適合します。
そして最後に、異なるモデルが一緒に追加されて最終的な結果が得る事が出来ます。
ランダムフォレスト
.score(X_trn[two_features], Y_trn))
.score(X_tst[two_features], Y_tst))
勾配ブースト木(Gradient Boosted Trees)
※ここでは出力結果を割愛しています。ぜひ一度どんな結果が出るか試してみてください^^
分類アルゴリズム~決定木の視覚化~
こんにちは!EMです^^
今回も引き続き、決定木の特に視覚化について学んでいきたいと思います。
決定木の視覚化(visualizing trees)
構築した決定木を視覚化していきましょう。
その為に、プログラムを含む2つの新しいパッケージをインストールしていきます。
1.オペレーティングシステムにGraphvizをダウンロードします
https://graphviz.gitlab.io/download/
2.Anaconaプロンプトから、conda install graphviz
を実行します
3.conda install pydotplus
を実行します
これが英語なので少し分かりにくいですが、決定木がどのように
派生しているのかというのが視覚的にイメージができやすいかと思います。
また正則化する時にも、どの程度の大きさの木を構築したいなどの
ボリューム感を掴むには、こういった方法で確認するのも一つの方法ですね。
それでは今回は短いですが、ここまでにします。
また次回もお楽しみに~^^
分類アルゴリズム~決定木②~
こんにちは!EMです^^
今回も引き続き、決定木について解説していきたいと思います。
決定木①では決定木が過学習しやすいというお話をしました。
では過学習してしまった時、どのように対処していくのかという事を
みていきましょう。
正則化(Regularization)
過学習をコントロールする方法として、事前剪定(pre-pruning)
と呼ばれる手法があります。
決定木は字のごとく木に例えられているので、木の枝が長くなる前に
刈ってしまうというイメージですね。
もしくはポスト剪定(post-pruning)といって、モデルを適合する間に
決定木の長さを調整をしていう方法もよく使われます。
これは一度モデルを適合した後に、決定木の長い枝を切っていくものなのですが
残念ながらsklearn
の中には実装されていません。
ここでは2つの事前剪定手法に注目していきたいと思います。
1.max_depth
を使用して、枝(ノード)の数を制限します。
これにより、木全体の複雑さが制限されて、個々のデータポイントごとに
必要以上に過学習を招く事を防ぎます。
2.min_samples_leaf
を使用して、各エリアがカバーする必要のある
データポイントの数に下限の値を設定します。
これにより、決定木はデータ量の多い領域に適合し
少ないデータポイントごとに特定の領域が作られるのを防ぎます。
どちらの手法も比較的うまく機能する事が多いです。
詳細については、こちらのサイトも参照してみてください。
http://scikit-learn.org/stable/modules/tree.html#tips-on-practical-use
分類アルゴリズム~決定木①~
こんにちは!EMです^^
さっそく今日も分類アルゴリズムシリーズをはじめていきたいと思います。
今日のテーマは「決定木」です!
決定木(Decision Trees)
決定木はイメージしやすいかもしれません。
例えば、10個ほどの質問をして、答えにたどり着くタイプの質問がよく
身近に目にするかと思います。
例えば、回答者は人や物や場所などについて考え、yesまたはnoで答えていきます。
そしてその導かれる答えによって、最終的な回答を予想していきます。
問題を進めていくほど、その回答によって考えられうる解決策を
狭めていく事ができます。
例をいうと「これは動物ですか?」という質問に「はい」と答え
「4本の足がありますか?」の答えが「いいえ」だった場合。
これは明らかに豚、羊、牛、犬などの4足歩行の動物は削除する事が出来ますよね。
この様に、最終的にはうまく答えにたどり着くという流れです。
決定木の木はノード(◇の結び目の部分)で構成され
一番上のノードをルートノード(根っこのノード)と言います。
各ノードは属性のテストを表します。
例えば、「色は『赤』」や「重量は『10kg未満』ですか?」などの質問が
各ノードに入ります。
さらに決定木は、階層モデルの例です。
木がもつ各ノードは、情報を蓄積しており、上からの情報を下に流しています。
一番下の先のないノードの事をリーフノード(木の葉っぱのイメージ)と言います。
リーフノードにたどり着くと、私たちは決定を下したり、結果を得る事が出来ます。
最終的にたどり着いたリーフノードは、その中から一番可能性の高い決定・結果を
表しています。
一般的に、決定木は元の特徴(feature)タイプに影響されません。
継続的な特徴である場合、自由に値を分割できます。
もし独立変数が連続的な特徴値 Xi を持っている場合、分割は値 V で行うことができ
Xi≤V が左の枝になり、すべての値Xi≥Vが右側の枝になります。
分離した特徴には、クラス値で分割できます。
tree
パッケージを使用して、決定木を構築してみましょう。
2つの特徴の境界プロット(上の図)から見ての通り、決定木は過学習をする傾向があります。
ここでも、私たちが作ったデータと同じもので仮説を検証するべきではないので
テスト/トレーニングデータを使用してみましょう。
精度が一気に低くなった事に気づきましたでしょうか。
どのように決定木を改善していくのかを見ていこうと思います!
分類アルゴリズム~SVM~
こんにちは!EMです^^
今回も分類アルゴリズムシリーズとして、解説していきたいと思っています。
今日はサポートベクターマシーンです!
ロジスティック回帰と同様に、サポートベクターマシーン(SVM)は
2つのグループの間にまっすぐな境界線を描きます。
ただし、ロジスティック回帰は境界線にシグモイド変換を適用し
闘値(少しズレると大きく変わるギリギリの値)を選択しますが
SVMは線を移動させることによってグループの間の分離を最適化します。
はじめて見ると、線形境界は制限の塊のように見えるかもしれませんが
今後扱っていくカーネル法だと、データをより高次元の空間に
マッピングできることがわかります。
つまり、異なる次元の空間の直線は、逆変換すると非線形になる可能性があります 。
SVC
カーネル法 SVM(Kernel SVMs)
SVMは直線の境界を描画しますが、はじめに問題をより高次元の空間にマッピングすることで
この制限をうまく避ける事ができます。
さらに異なる空間に描かれた直線を、クラス間の非線形境界にマッピングして戻すことができます。
このマッピング関数はカーネルと呼ばれます。
この方法の欠点は、カーネルを指定する必要があり、問題に対して
常に直感的であるとは限りません。
幸いなことにScikit-Learnは、放射基底関数など何通りかの組み込みカーネルを提供しています。
kernel_SVM_model.score(X_trn[features_to_include], Y_trn))
kernel_SVM_model.score(X_tst[features_to_include], Y_tst))
【output】
accuracy on training data 0.9176331360946746
accuracy on test data 0.7753726046841731
kernel_svm_model_2feat.score(X_trn[two_features], Y_trn))
kernel_svm_model_2feat.score(X_tst[two_features], Y_tst))
accuracy on test data 0.7792760823278921
今回は2通りのSVMを見てきました。
今後もさらに色んなアルゴリズムを見ていきたいと思います。
最後まで読んで頂きありがとうございました。
分類アルゴリズム~ロジスティック回帰~
こんにちは!EMです^^
今日はロジスティック回帰について学んでいこうと思います。
ロジスティック回帰(Logistic Regression)
ロジスティック回帰は、カテゴリーデータを分類するための
最も基本的かつ効果的なツールの1つです。
線形回帰では、下の形式の線形方程式を使ってデータをモデル化しました。
この方程式は、数値の入力属性から数値の予測を出力していきます。
各βiは、出力値を予測する時に、どのくらいそのモデルがXiという重みであるかを
表しています。
さて、問題です。
この関数を分類的な予測を出したい時にどのようにすればよいでしょうか?
ここでは、ロジスティック回帰と共に、シグモイド曲線を利用します。
という事を忘れないでください。
accuracy on test data 0.8058907026259758
結果が見えてたのしくなると思います^^