Python: 機械学習からはじめるPython入門2, google colaboratory ver. 3

機械学習からはじめるPython入門1の続きです。

 

次の解説に基づいて学びます。初心者向けに大変わかりやすく書かれています。

 

Your First Machine Learning Project in Python Step-By-Step

 

IX.機械学習:データの分割

 

1.基本的なアイデア

 

ここからが機械学習ですが、少しややこしくなりますが、細かいところは飛ばせばよいです。

前章までで、データフレーム(Excelの表のような形)で取得したirisを使って、どのようなデータであるかを数値とグラフで確認しました。

機械学習では、irisのガクと花びらの長さと幅のデータから花の種類を推測するモデルを作成します。

イメージとしては、それぞれのデータを配置した多次元空間で、それぞれの花のデータ間の距離を測定し、花の種類に応じてグループ化、ここでは3つのグループを作ります、それを新しいデータに適応して、どの花のグループに属するかを推測すると考えればよいと思います。

そこで、まず、データフレームを多次元アレイを扱うNumpyのarray形式に変換します。データフレームでは多次元アレイを集計できないからです。

次に、それを学習用データど検証用データにわけます。irisには150件のデータがありました。そこで、データをランダムに80%(120行)と20%(30行)に分けます。

図にすると次のようになります。

 

 

2.スクリプトの説明

 

numpyを使ってデータフレームをアレイに変換します。式の意味は、irisをarrayに変換して、iris.arrayと名付けるです。

 

iris.array = iris.values

 

データを80%(120行)と20%(30行)に分けます。その際、偏らないようにランダムに選択します。同じランダムな数値をあとで用いるので、seed()を設定しています。

ちなみに、プログラムによって生成されるランダムな数値は擬似的なものです。Pythonの場合、seed()に適当な数字をいれて発生した乱数は、seed()に同じ数字をいれることで再現できます。つまり本当の乱数ではないということです。ふつう、seed()に数字が指定されていない場合は、コンピュータの時間をもとにら乱数が作られます。

seed()を設定するのは、その乱数をあとで用いるためです。

分割には、skleanのmodel_seleciton.train_test_split()を使用しますが、式をわかりやすくするために、下の図の[10]にあるように、()内のアーギュメントを取り出して先に定義しています。

 

X_train, X_validation, Y_train, Y_validation = model_selection.train_test_split(X, Y, test_size=validation_size, random_state=seed)

 

ところで、下の図の式にあるiris_array[:,0:4]の[ , ]のカンマの左は行、右は列を示しています。ですから、この式の意味は、データiris_arrayのすべての行の0列から4列未満、つまり、データの第1列から第3列までを取り出すということです。

 

# Split-out validation dataset
array = dataset.values
 

 

この結果、次のようにデータが分けらていることを確認できます。

 

 

 

 

 

 

 

 

X.モデルのテストと評価

 

上で作成したtrainデータを10に分割して、9を学習に、1をテストに使います。モデルは6つあり、それぞれの判定結果をaccuracyの基準で評価します。ガクと花びらの縦横のデータと花の種類がすべて合致していれば1となる割合が算出されます。

スクリプトと実行結果はを下に示します。ちなみに、apennd()は「後に付け足す」関数で、評価結果を順に付け加えます。

一番したの評価結果からわかるように、SVMがもっとも正しく判定しているという結果が出ました。

 

 

ここまでのスクリプトをGoogle Colaboratoryで公開しています。

 

https://colab.research.google.com/drive/1PTdeqS7LKM21gQty6sRipB9mk7Li7Zki

 

not complete

About shibatau

I was born and grown up in Kyoto. I studied western philosophy at the University and specialized in analytic philosophy, especially Ludwig Wittgenstein at the postgraduate school. I'm interested in new technology, especially machine learning and have been learning R language for two years and began to learn Python last summer. Listening toParamore, Sia, Amazarashi and MIyuki Nakajima. Favorite movies I've recently seen: "FREEHELD". Favorite actors and actresses: Anthony Hopkins, Denzel Washington, Ellen Page, Meryl Streep, Mia Wasikowska and Robert DeNiro. Favorite books: Fyodor Mikhailovich Dostoyevsky, "The Karamazov Brothers", Shinran, "Lamentations of Divergences". Favorite phrase: Salvation by Faith. Twitter: @shibatau

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.