SlideShare a Scribd company logo
Machine Learning for Everyone Else
Python 機械学習プログラミング
データ分析演習編
Ver2.1 2017/06/11
中井悦司 (Twitter @enakai00)
2
Python 機械学習プログラミング
目次
■
ハンズオン環境の利用方法
■
分析データの取り込みと確認
■
分析データの可視化
■
scikit-learnによる機械学習処理
3
Python 機械学習プログラミング
ハンズオン環境の利用方法
4
Python 機械学習プログラミング
ハンズオン環境の利用方法
■
本講義のハンズオン環境は、クラウド上の仮想マシンで用意してあります。下
記のBlog記事の手順にしたがって、同じ環境を自分で用意することもできま
す。
- Jupyter演習環境の準備手順
- http://enakai00.hatenablog.com/entry/2016/11/18/134724
5
Python 機械学習プログラミング
ハンズオン環境の利用方法
■
指定のURLにアクセスするとパスワード入力画面が表示されるので、指定のロ
グインパスワードを入力します。
■
ログインすると「ノートブックファイル」の一覧画面が表示されますが、今は
まだノートブックファイルはありません。
6
Python 機械学習プログラミング
ハンズオン環境の利用方法
■
右上のプルダウンメニューから「New」→「Python 2」を選択すると新しい
ノートブックが開きます。
■
タイトル部分をクリックすると、新しいタイトルが設定できます。「<タイト
ル>.ipynb」が対応するファイル名になります。(タイトルには日本語は使え
ません。)
7
Python 機械学習プログラミング
ハンズオン環境の利用方法
■
ノートブック上では、セルにプログラムコードを入力して、「▶」ボタン、も
しくは [Ctrl] + [Enter] で実行すると結果が表示されます。
■
マークダウン形式のセルには説明文を記載することができます。
セルの形式を選択
マークダウン形式のセル
コード形式のセル
変数に値を設定
変数の値を表示
8
Python 機械学習プログラミング
ハンズオン環境の利用方法
■
ノートブック全体を最初から実行し直す場合は、メニューから「Kernel」→
「Restart & Clear Output」を選択して、これまでの実行内容をクリアしま
す。
9
Python 機械学習プログラミング
ハンズオン環境の利用方法
■
空のセルで次のコマンドを実行すると、演習用のノートブックがダウンロード
できます。
- ノートブックファイル一覧画面で下記のノートブックを開きます。
「jupyter_ml4se_commentary」⇒「Solutions」⇒「Titanic Example.ipynb」
!git clone https://github.com/enakai00/jupyter_ml4se_commentary
10
Python 機械学習プログラミング
分析データの取り込みと確認
11
Python 機械学習プログラミング
データの取り込み
■
Webで公開されているcsvデータをpandasのデータフレームに取り込みます。
- 取り込んだデータの説明は下記に記載されています。
●
http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3info.txt
- 数値自体に意味のないデータが数値で表現されている場合、誤った(意味のない)統計量を計算
しないように、データ型を文字列型に変換しておきます。いまの場合、「pclass(社会的地
位)」は数値で表現されていますが、この値の「平均値」を取っても特に意味はありません。
In [1]: import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from pandas import Series, DataFrame
In [2]: data = pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3.csv')
data['pclass'] = data['pclass'].map(str) # pclassの型を文字列型に変換
VARIABLE DESCRIPTIONS:
pclass Passenger Class
(1 = 1st; 2 = 2nd; 3 = 3rd)
survived Survival
(0 = No; 1 = Yes)
name Name
sex Sex
age Age
sibsp Number of Siblings/Spouses Aboard
parch Number of Parents/Children Aboard
ticket Ticket Number
fare Passenger Fare
cabin Cabin
embarked Port of Embarkation
(C = Cherbourg; Q = Queenstown; S = Southampton)
boat Lifeboat
body Body Identification Number
home.dest Home/Destination
タイタニック号の乗船名簿の情報に、
沈没による死亡情報を加えたものです。
12
Python 機械学習プログラミング
データの全体感の把握
■
取り込んだデータの全体像を眺めて特徴を把握します。
- 今回使用するデータはそれほど大きくない(全部で1309件)ので、まずはスプレッドシートで
開いて、どのようなデータか眺めておきます。
- 項目によっては欠損値(データが埋まっていないセル)が多いなどのデータセットとしての特
徴、あるいは、「1歳未満の乳児が乗船している」などの社会的観点での特徴が見えてきます。
13
Python 機械学習プログラミング
データのサマリー情報の確認
■
項目ごとのデータ数や平均値など、標準的な統計量を確認しておきます。
- 項目によってデータ数(count)が異なるのは、欠損値が存在するためです。
- 欠損値の影響で、パーセンタイルがうまく計算できていない部分があります。これらの項目は、
次ページのように、欠損値を削除して計算します。
In [3]: data.columns
Out[3]: Index([u'pclass', u'survived', u'name', u'sex', u'age', u'sibsp', u'parch',
u'ticket', u'fare', u'cabin', u'embarked', u'boat', u'body',
u'home.dest'], dtype='object')
In [4]: data.describe()
Out[4]:
14
Python 機械学習プログラミング
データのサマリー情報の確認
■
dropna()メソッドで欠損値を含む行を削除した上で、統計情報を確認します。
- 平均値(mean)と中央値(50%)が乖離している場合、値の分布に歪み(skew)があると考え
られます。
In [5]: data[['age']].dropna().describe()
In [6]: data[['fare']].dropna().describe()
In [7]: data[['body']].dropna().describe()
平均値と中央値が
乖離した例
15
Python 機械学習プログラミング
分析データの可視化
16
Python 機械学習プログラミング
■
数値データはヒストグラムによって可視化します。
- 例として、年齢(age)と料金(fare)の分布をヒストグラムで確認します。
●
binsオプションには、区間の個数、もしくは、区間の区切りを並べたリストを与えます。
- 5歳未満の子供の分布、もしくは、200ポンド以上の高額料金の乗客などに分布の特徴が見られ
ます。
数値データの可視化
In [8]: data[['age']].dropna().plot(kind='hist', bins=np.linspace(0,100,20+1))
In [9]: data[['fare']].dropna().plot(kind='hist', bins=20) グラフ化する際は、dropna()で
欠損値を削除しておきます。
17
Python 機械学習プログラミング
数値データの相関の可視化
■
2つの数値データの関係性を見るときは、散布図で可視化します。
- 例として、年齢(age)と料金(fare)の関係を散布図で表示します。
In [10]: df = data[['age','fare']].dropna()
df.plot(kind='scatter', x='age', y='fare')
- 特に目立った関係はありませんが、200
ポンド以上の料金で乗船しているのは15
歳以上に限られるなどが確認できます。
18
Python 機械学習プログラミング
カテゴリーデータと数値データの相関の可視化
■
カテゴリーデータと数値データの関係性を見るときは、箱ひげ図で可視化します。
- 例として、社会的地位(pclass)と料金(fare)の関係を箱ひげ図で表示します。
In [11]: df = data[['fare','pclass']].dropna()
df.boxplot(column='fare', by='pclass')
- 社会的地位が高い人(pclass:1)は
高額料金で乗船していることがわか
ります。
外れ値
75パーセンタイル
50パーセンタイル
(中央値)
25パーセンタイル
19
Python 機械学習プログラミング
3つ以上のデータの相関の可視化
■
3つ以上のデータの関係を表示する場合は、データの種類に応じて適切な可視化方法を
選択する必要があります。
- たとえば、年齢(age)と料金(fare)の散布図を社会的地位(pclass)で色分けしてみます。
In [12]: df1 = data[data.pclass=='1'][['age','fare']].dropna()
df2 = data[data.pclass=='2'][['age','fare']].dropna()
df3 = data[data.pclass=='3'][['age','fare']].dropna()
plt.scatter(df1.age, df1.fare, facecolor='blue')
plt.scatter(df2.age, df2.fare, facecolor='green')
plt.scatter(df3.age, df3.fare, facecolor='red')
20
Python 機械学習プログラミング
カテゴリーデータの相関
■
カテゴリーデータの例として、性別(sex)と生存(survival)の相関を確認します。
- 2種類のカテゴリーデータの相関は、クロス集計表で確認します。
- この結果を見ると、性別によって生存率が大きく変わることが分かります。
- 同様の分析を社会的地位(pclass)と生存(survival)について行ってみてください。
- また、その他のデータについても自分なりの可視化を行って、特徴を発見してみてください。
In [13]: df = data[['sex','survived']].dropna()
pd.crosstab(df.sex, df.survived)
Out[13]:
In [14]: pd.crosstab(data.sex ,data.survived).plot(kind='bar')
In [15]: df.mean()
Out[15]:
Survived 0.381971 # 平均生存率
dtype: float64
In [16]: 339.0/(127+339)
Out[16]: 0.7274678111587983 # 女性の生存率
21
Python 機械学習プログラミング
scikit-learnによる機械学習処理
22
Python 機械学習プログラミング
ロジスティック回帰
■
「性別」「年齢」の2つの特徴を用いたロジスティック回帰で、生存確率を予測するモ
デルを構築します。
- この後の分析で使用するモジュールをインポートします。
- 欠損値を含む行を削除して、分析に使用する列のみを含むDataFrameを用意します。ここでは、
特徴変数 X_ とラベル y を個別にDataFrameとして作成しています。
- 性別はカテゴリーデータなので、One Hot Encodingに変換します。
In [20]: from PIL import Image
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier, export_graphviz
In [22]: X = pd.get_dummies(X_)
X.head()
In [21]: tmp = data[['age', 'sex', 'survived']].dropna()
X_ = tmp[['age', 'sex']]
y = tmp['survived']
X_.head()
23
Python 機械学習プログラミング
ロジスティック回帰
- データセットをトレーニングセットとテストセットに分割した後、トレーニングセットを用いて
学習処理を実行します。さらに、トレーニングセットとテストセットに対する正解率を計算しま
す。
- クロスバリデーションを実施して、結果を表示します。
In [23]: X_train, X_val, y_train, y_val = train_test_split(X, y, train_size=0.8, random_state=1)
clf = LogisticRegression()
clf.fit(X_train, y_train)
y_train_pred = clf.predict(X_train)
y_val_pred = clf.predict(X_val)
print 'Accuracy on Training Set: {:.3f}'.format(accuracy_score(y_train, y_train_pred))
print 'Accuracy on Validation Set: {:.3f}'.format(accuracy_score(y_val, y_val_pred))
Out[23]:
Accuracy on Training Set: 0.775
Accuracy on Validation Set: 0.795
In [24]: clf = LogisticRegression()
scores = cross_val_score(clf, X, y, cv=5)
print 'Scores:', scores
print 'Mean Score: {:f} ± {:.3}'.format(scores.mean(), scores.std())
Out[24]:
Scores: [ 0.84761905 0.83333333 0.78947368 0.74641148 0.67788462]
Mean Score: 0.778944 ± 0.0617
24
Python 機械学習プログラミング
決定木(Decision Tree)
■
決定木を用いて、先ほどと同じ分析を実施します。
- クロスバリデーションを実施して、結果を表示します。
- 決定木を画像化して表示します。
In [26]: clf = DecisionTreeClassifier(criterion='entropy', max_depth=2, min_samples_leaf=2)
scores = cross_val_score(clf, X, y, cv=5)
print 'Scores:', scores
print 'Mean Score: {:f} ± {:.3}'.format(scores.mean(), scores.std())
Out [26]:
Scores: [ 0.85714286 0.83809524 0.79425837 0.74641148 0.64423077]
Mean Score: 0.776028 ± 0.0762
In [27]: clf.fit(X, y)
export_graphviz(clf, out_file='tree.dot',
feature_names=X.columns,
class_names=['not survived', 'survived'],
impurity=False, filled=True)
!dot -Tpng tree.dot -o tree.png
Image.open("tree.png")
- 性別・年齢・社会的地位(pclass)を特徴量
として、同様の分析を行ってみてください
※ 特徴量を増やした場合は、決定木の階層をより深
 くするとよい場合があります。
25
Python 機械学習プログラミング
メモとしてお使いください
Machine Learning for Everyone Else
Thank You!

More Related Content

PDF
オブジェクト指向プログラミングの現在・過去・未来
PDF
20230105_TITECH_lecture_ishizaki_public.pdf
PDF
レプリカ交換モンテカルロ法で乱数の生成
PDF
ドメイン駆動設計 本格入門
PDF
Dart のコード自動生成の仕組みと、コード自動生成のパッケージを自作する方法について
PPTX
多項式あてはめで眺めるベイズ推定 ~今日からきみもベイジアン~
PPTX
Recommandation forcompetitiveprogrammers
PPTX
Cvim saisentan 半精度浮動小数点数 half
オブジェクト指向プログラミングの現在・過去・未来
20230105_TITECH_lecture_ishizaki_public.pdf
レプリカ交換モンテカルロ法で乱数の生成
ドメイン駆動設計 本格入門
Dart のコード自動生成の仕組みと、コード自動生成のパッケージを自作する方法について
多項式あてはめで眺めるベイズ推定 ~今日からきみもベイジアン~
Recommandation forcompetitiveprogrammers
Cvim saisentan 半精度浮動小数点数 half

What's hot (20)

PDF
React(TypeScript) + Go + Auth0 で実現する管理画面
PDF
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
PDF
はじめてのパターン認識 第8章 サポートベクトルマシン
PDF
第2回ナレッジグラフ推論チャレンジ2019の紹介(11/22, SWO研究会)
PDF
リレーショナルな正しいデータベース設計
PDF
GoでMinecraftっぽいの作る
PDF
暗号技術の実装と数学
PPTX
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
PDF
TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術
PDF
A corrente pedagógica racional tecnológica Libâneo e cibercultura
PDF
PHPで大規模ブラウザゲームを開発してわかったこと
PPTX
確率ロボティクスの復習とF^3RCでの使い方
PDF
プログラムの処方箋~健康なコードと病んだコード
PDF
世界でいちばんわかりやすいドメイン駆動設計
PDF
オブジェクト指向エクササイズのススメ
PDF
Projeto pibid
PDF
第12回 配信講義 計算科学技術特論A(2021)
PPTX
Neko kin
PPTX
You Only Learn One Representation: Unified Network for Multiple Tasks
PPTX
adversarial training.pptx
React(TypeScript) + Go + Auth0 で実現する管理画面
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
はじめてのパターン認識 第8章 サポートベクトルマシン
第2回ナレッジグラフ推論チャレンジ2019の紹介(11/22, SWO研究会)
リレーショナルな正しいデータベース設計
GoでMinecraftっぽいの作る
暗号技術の実装と数学
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術
A corrente pedagógica racional tecnológica Libâneo e cibercultura
PHPで大規模ブラウザゲームを開発してわかったこと
確率ロボティクスの復習とF^3RCでの使い方
プログラムの処方箋~健康なコードと病んだコード
世界でいちばんわかりやすいドメイン駆動設計
オブジェクト指向エクササイズのススメ
Projeto pibid
第12回 配信講義 計算科学技術特論A(2021)
Neko kin
You Only Learn One Representation: Unified Network for Multiple Tasks
adversarial training.pptx
Ad

Viewers also liked (20)

PDF
Python 機械学習プログラミング データ分析ライブラリー解説編
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PDF
TensorFlowによるニューラルネットワーク入門
PDF
Scikit learnで学ぶ機械学習入門
PDF
Machine Learning Basics for Web Application Developers
PDF
RとPythonによるデータ解析入門
PDF
Pythonで簡単ネットワーク分析
PDF
「Python言語」はじめの一歩 / First step of Python
PDF
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
PDF
Spannerに関する技術メモ
PDF
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
PDF
Your first TensorFlow programming with Jupyter
PDF
A Brief History of My English Learning
PDF
「TensorFlow Tutorialの数学的背景」 クイックツアー(パート1)
PDF
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
PDF
Using Kubernetes on Google Container Engine
PDF
Python東海Vol.5 IPythonをマスターしよう
PDF
TensorFlowプログラミングと分類アルゴリズムの基礎
PDF
PythonによるWebスクレイピング入門
PDF
機械学習概論 講義テキスト
Python 機械学習プログラミング データ分析ライブラリー解説編
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
TensorFlowによるニューラルネットワーク入門
Scikit learnで学ぶ機械学習入門
Machine Learning Basics for Web Application Developers
RとPythonによるデータ解析入門
Pythonで簡単ネットワーク分析
「Python言語」はじめの一歩 / First step of Python
野球Hack!~Pythonを用いたデータ分析と可視化 #pyconjp
Spannerに関する技術メモ
OpenStackをさらに”使う”技術 - OpenStack&Docker活用テクニック
Your first TensorFlow programming with Jupyter
A Brief History of My English Learning
「TensorFlow Tutorialの数学的背景」 クイックツアー(パート1)
ソフトウェアエンジニアのための「機械学習理論」入門・ハンズオン演習ガイド
Using Kubernetes on Google Container Engine
Python東海Vol.5 IPythonをマスターしよう
TensorFlowプログラミングと分類アルゴリズムの基礎
PythonによるWebスクレイピング入門
機械学習概論 講義テキスト
Ad

Similar to Python 機械学習プログラミング データ分析演習編 (20)

PDF
【更新版】20190628玉川大学脳トレ社会科学oTree演習編
ODP
Introduction of Python
PPTX
Web applicationpenetrationtest その2
PPTX
はじめての人のためのDeep Learning
PPTX
Python による 「スクレイピング & 自然言語処理」入門
PDF
Pythonによる並列プログラミング -GPGPUも-
PPTX
2016年2月4日 空間OSのためのビッグデータ技術基盤
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PDF
協調フィルタリング with Mahout
PDF
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
PDF
Elasticsearchと機械学習を実際に連携させる
KEY
OSS奨励賞受賞プレゼン 活動紹介
PDF
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
PDF
Scikit-learnを使って 画像分類を行う
PPTX
Statically detecting vulnerability under memory pressure using exhaustive search
PPTX
BotとWikiを使った試験的な並列プログラミング
PDF
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
PDF
Kubeflowで何ができて何ができないのか #DEvFest18
PDF
Pythonによる機械学習入門 ~Deep Learningに挑戦~
PDF
0730 bp study#35発表資料
【更新版】20190628玉川大学脳トレ社会科学oTree演習編
Introduction of Python
Web applicationpenetrationtest その2
はじめての人のためのDeep Learning
Python による 「スクレイピング & 自然言語処理」入門
Pythonによる並列プログラミング -GPGPUも-
2016年2月4日 空間OSのためのビッグデータ技術基盤
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
協調フィルタリング with Mahout
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
Elasticsearchと機械学習を実際に連携させる
OSS奨励賞受賞プレゼン 活動紹介
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Scikit-learnを使って 画像分類を行う
Statically detecting vulnerability under memory pressure using exhaustive search
BotとWikiを使った試験的な並列プログラミング
Deep Learningハンズオン勉強会「Caffeで画像分類を試してみようの会」
Kubeflowで何ができて何ができないのか #DEvFest18
Pythonによる機械学習入門 ~Deep Learningに挑戦~
0730 bp study#35発表資料

More from Etsuji Nakai (20)

PDF
PRML11.2-11.3
PDF
「ITエンジニアリングの本質」を考える
PDF
Googleのインフラ技術に見る基盤標準化とDevOpsの真実
PDF
Introducton to Convolutional Nerural Network with TensorFlow
PDF
Googleにおける機械学習の活用とクラウドサービス
PDF
Googleのインフラ技術から考える理想のDevOps
PDF
Lecture note on PRML 8.2
PDF
Deep Q-Network for beginners
PDF
Life with jupyter
PDF
TensorFlowで学ぶDQN
PDF
DevOpsにおける組織に固有の事情を どのように整理するべきか
PDF
PRML7.2
PDF
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
PDF
Exploring the Philosophy behind Docker/Kubernetes/OpenShift
PDF
Docker活用パターンの整理 ― どう組み合わせるのが正解?!
PDF
Open Shift v3 主要機能と内部構造のご紹介
PDF
Docker with RHEL7 技術勉強会
PDF
分散ストレージソフトウェアCeph・アーキテクチャー概要
PDF
OpenStackとDockerの未来像
PDF
OpenShift v3 Technical Introduction
PRML11.2-11.3
「ITエンジニアリングの本質」を考える
Googleのインフラ技術に見る基盤標準化とDevOpsの真実
Introducton to Convolutional Nerural Network with TensorFlow
Googleにおける機械学習の活用とクラウドサービス
Googleのインフラ技術から考える理想のDevOps
Lecture note on PRML 8.2
Deep Q-Network for beginners
Life with jupyter
TensorFlowで学ぶDQN
DevOpsにおける組織に固有の事情を どのように整理するべきか
PRML7.2
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
Exploring the Philosophy behind Docker/Kubernetes/OpenShift
Docker活用パターンの整理 ― どう組み合わせるのが正解?!
Open Shift v3 主要機能と内部構造のご紹介
Docker with RHEL7 技術勉強会
分散ストレージソフトウェアCeph・アーキテクチャー概要
OpenStackとDockerの未来像
OpenShift v3 Technical Introduction

Python 機械学習プログラミング データ分析演習編