Pythonチュートリアル

Pythonホーム Pythonイントロ Pythonはじめに Python構文 Pythonコメント Python変数 Pythonデータ型 Python番号 Pythonキャスティング Python文字列 Pythonブール値 Python演算子 Pythonリスト Pythonタプル Pythonセット Python辞書 Python If ... Else PythonのWhileループ PythonForループ Python関数 Python Lambda Python配列 Pythonクラス/オブジェクト Pythonの継承 Pythonイテレータ Pythonスコープ Pythonモジュール Pythonの日付 Python数学 Python JSON Python RegEx Python PIP Python試してみてください... Pythonユーザー入力 Python文字列フォーマット

ファイル処理

Pythonファイル処理 Python読み取りファイル Python書き込み/ファイルの作成 Pythonファイルの削除

Pythonモジュール

NumPyチュートリアル パンダ攻略 Scipyチュートリアル

Python Matplotlib

Matplotlibイントロ Matplotlibはじめに Matplotlib Pyplot Matplotlibプロット Matplotlibマーカー Matplotlibライン Matplotlibラベル Matplotlibグリッド Matplotlibサブプロット Matplotlib散布図 Matplotlibバー Matplotlibヒストグラム Matplotlib円グラフ

機械学習

入門 平均中央値モード 標準偏差 パーセンタイル データ配信 正規データ分布 散布図 線形回帰 多項式回帰 重回帰 規模 トレーニング/テスト デシジョンツリー

Python MySQL

MySQLはじめに MySQLデータベースの作成 MySQLテーブルの作成 MySQL挿入 MySQL Select MySQL Where MySQL Order By MySQL削除 MySQLドロップテーブル MySQLアップデート MySQLの制限 MySQL参加

Python MongoDB

MongoDBはじめに MongoDBデータベースの作成 MongoDBCreateコレクション MongoDBインサート MongoDB検索 MongoDBクエリ MongoDBソート MongoDB削除 MongoDBドロップコレクション MongoDBアップデート MongoDBの制限

Pythonリファレンス

Pythonの概要 Python組み込み関数 Python文字列メソッド Pythonリストメソッド Python辞書メソッド Pythonタプルメソッド Pythonセットメソッド Pythonファイルメソッド Pythonキーワード Pythonの例外 Python用語集

モジュールリファレンス

ランダムモジュール リクエストモジュール 統計モジュール 数学モジュール cMathモジュール

Pythonハウツー

リストの重複を削除する 文字列を逆にする 2つの数字を追加する

Pythonの例

Pythonの例 Pythonコンパイラ Python演習 Pythonクイズ Python証明書

機械学習-ディシジョンツリー



デシジョンツリー

この章では、「デシジョンツリー」の作成方法を説明します。デシジョンツリーはフローチャートであり、以前の経験に基づいて意思決定を行うのに役立ちます。

この例では、人はコメディショーに行くべきかどうかを決定しようとします。

幸いなことに、私たちの例の人は、町でコメディショーが行われるたびに登録し、コメディアンに関するいくつかの情報を登録し、彼/彼女が行ったかどうかも登録しました。

経験 ランク 国籍 行け
36 10 9 英国 いいえ
42 12 4 米国 いいえ
23 4 6 N いいえ
52 4 4 米国 いいえ
43 21 8 米国 はい
44 14 5 英国 いいえ
66 3 7 N はい
35 14 9 英国 はい
52 13 7 N はい
35 5 9 N はい
24 3 5 米国 いいえ
18 3 7 英国 はい
45 9 9 英国 はい

現在、このデータセットに基づいて、Pythonは、新しい番組に参加する価値があるかどうかを判断するために使用できる決定木を作成できます。



それはどのように機能しますか?

まず、必要なモジュールをインポートし、パンダでデータセットを読み取ります。

データセットを読み取って印刷します。

import pandas
from sklearn import tree
import pydotplus
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
import matplotlib.image as pltimg

df = pandas.read_csv("shows.csv")

print(df)

デシジョンツリーを作成するには、すべてのデータが数値である必要があります。

非数値列「Nationality」と「Go」を数値に変換する必要があります。

Pandasにはmap()、値を変換する方法に関する情報を含む辞書を取得するメソッドがあります。

{'UK': 0, 'USA': 1, 'N': 2}

値「UK」を0に、「USA」を1に、「N」を2に変換することを意味します。

文字列値を数値に変更します。

d = {'UK': 0, 'USA': 1, 'N': 2}
df['Nationality'] = df['Nationality'].map(d)
d = {'YES': 1, 'NO': 0}
df['Go'] = df['Go'].map(d)

print(df)

次に、特徴列をターゲット列から分離する必要があります。

特徴列は、から予測しようとするであり、ターゲット列は、予測しようとする値を持つ列です。

Xは機能列、 yはターゲット列です。

features = ['Age', 'Experience', 'Rank', 'Nationality']

X = df[features]
y = df['Go']

print(X)
print(y)

これで、実際の決定木を作成し、それを詳細に合わせて、コンピューターに.pngファイルを保存できます。

デシジョンツリーを作成し、画像として保存して、画像を表示します。

dtree = DecisionTreeClassifier()
dtree = dtree.fit(X, y)
data = tree.export_graphviz(dtree, out_file=None, feature_names=features)
graph = pydotplus.graph_from_dot_data(data)
graph.write_png('mydecisiontree.png')

img=pltimg.imread('mydecisiontree.png')
imgplot = plt.imshow(img)
plt.show()


結果の説明

デシジョンツリーは、以前の決定を使用して、コメディアンに会いたいかどうかのオッズを計算します。

デシジョンツリーのさまざまな側面を読んでみましょう。

ランク

Rank <= 6.5ランク6.5以下のすべてのコメディアンは True矢印(左側)をたどり、残りはFalse矢印(右側)をたどることを意味します。

gini = 0.497は分割の品質を指し、常に0.0から0.5の間の数値です。ここで、0.0はすべてのサンプルが同じ結果を得たことを意味し、0.5は分割がちょうど真ん中で行われることを意味します。

samples = 13これは、決定のこの時点で13人のコメディアンが残っていることを意味します。これは最初のステップであるため、全員です。

value = [6, 7]つまり、これら13人のコメディアンのうち、6人が「いいえ」、7人が「GO」になります。

ジニ

サンプルを分割する方法はたくさんあります。このチュートリアルではGINIメソッドを使用します。

Giniメソッドは次の式を使用します。

Gini = 1 - (x/n)2 - (y/n)2

ここxで、は正の回答の数( "GO")、 nはサンプル yの数、は負の回答の数( "NO")であり、次の計算が得られます。

1 - (7 / 13)2 - (6 / 13)2 = 0.497

次のステップには2つのボックスが含まれます。1つは「ランク」が6.5以下のコメディアン用のボックスで、もう1つは残りのボックスです。

True-5人のコメディアンはここで終わります:

gini = 0.0 すべてのサンプルが同じ結果を得たことを意味します。

samples = 5このブランチには5人のコメディアンが残っていることを意味します(ランク6.5以下の5人のコメディアン)。

value = [5, 0]5は「NO」を取得し、0は「GO」を取得することを意味します。

誤り-8人のコメディアンが続ける:

国籍

Nationality <= 0.5国籍の値が0.5未満のコメディアンは、左側の矢印(つまり、英国の全員)をたどり、残りは右側の矢印をたどることを意味します。

gini = 0.219これは、サンプルの約22%が一方向に進むことを意味します。

samples = 8このブランチには8人のコメディアンが残っていることを意味します(ランクが6.5より高い8人のコメディアン)。

value = [1, 7]つまり、これらの8人のコメディアンのうち、1人は「いいえ」、7人は「GO」になります。




真-4人のコメディアンが続く:

Age <= 35.5つまり、35.5歳以下のコメディアンは左の矢印に従い、残りは右の矢印に従います。

gini = 0.375これは、サンプルの約37.5%が一方向に進むことを意味します。

samples = 4このブランチには4人のコメディアンが残っていることを意味します(英国からの4人のコメディアン)。

value = [1, 3]つまり、これら4人のコメディアンのうち、1人は「いいえ」、3人は「GO」になります。

誤り-4人のコメディアンはここで終わります:

gini = 0.0 すべてのサンプルが同じ結果を得たことを意味します。

samples = 4このブランチには4人のコメディアンが残っていることを意味します(英国以外の4人のコメディアン)。

value = [0, 4]つまり、これら4人のコメディアンのうち、0人は「NO」、4人は「GO」になります。




True-2人のコメディアンはここで終わります:

gini = 0.0 すべてのサンプルが同じ結果を得たことを意味します。

samples = 2このブランチには2人のコメディアンが残っていることを意味します(35.5歳以下の2人のコメディアン)。

value = [0, 2] つまり、これら2人のコメディアンのうち、0人は「NO」を取得し、2人は「GO」を取得します。

誤り-2人のコメディアンが続ける:

経験

Experience <= 9.5 つまり、9。5年以下の経験を持つコメディアンは左の矢印に従い、残りは右の矢印に従います。

gini = 0.5 これは、サンプルの50%が一方向に進むことを意味します。

samples = 2 このブランチには2人のコメディアンが残っていることを意味します(35.5歳以上の2人のコメディアン)。

value = [1, 1] つまり、これら2人のコメディアンのうち、1人は「いいえ」、1人は「GO」になります。




True-1コメディアンはここで終わります:

gini = 0.0 すべてのサンプルが同じ結果を得たことを意味します。

samples = 1 このブランチには1人のコメディアンが残っていることを意味します(9。5年以下の経験を持つ1人のコメディアン)。

value = [0, 1] 0は「NO」を取得し、1は「GO」を取得することを意味します。

False-1コメディアンはここで終わります:

gini = 0.0 すべてのサンプルが同じ結果を得たことを意味します。

samples = 1このブランチには1人のコメディアンが残っていることを意味します(9。5年以上の経験を持つ1人のコメディアン)。

value = [1, 0]1は「NO」を取得し、0は「GO」を取得することを意味します。


値を予測する

デシジョンツリーを使用して、新しい値を予測できます。

例:10年の経験があり、コメディのランキングが7である、40歳のアメリカのコメディアンが出演するショーを見に行く必要がありますか?

新しい値を予測するには、predict()メソッドを使用します。

print(dtree.predict([[40, 10, 7, 1]]))

コメディランクが6だったら、答えはどうなるでしょうか。

print(dtree.predict([[40, 10, 6, 1]]))


異なる結果

同じデータをフィードした場合でも、十分な回数実行すると、ディシジョンツリーの結果が異なることがわかります。

これは、ディシジョンツリーが100%確実な答えを提供しないためです。それは結果の確率に基づいており、答えは異なります。