sklearnで学習を進めるにあたって、知っておくべきメモ
【目次】
- 1. sklearnのDatasetsを使った学習にあたって
- 2. sklearnで用意されているDatasets
- 3. Datasetsの中身をのぞいてみる(load_iris)
- 3.1. load_irisの全体像
- 4. データを読みやすくする
【動作環境】
1. sklearnのDatasetsを使った学習にあたって
sklearnの学習に突入した時最初に思ったのは、sklearnのdatasetsってどんな様式になっているのだろうかと思った。
参考書を通して目的変数、説明変数も理解できて、sklearnのデータの内容も何となくわかったけど、いざプログラムでデータを読み出した時、どこに何のデータが隠れているのか全く読むことができず、再現性のあるスキル習得ができなかったのではないかと感じた。
今となっては、大丈夫だが学習効率の面で少々ロスしたのかもしれない。
そもそも使っているデータセットの見方がわからないと、機械学習の方法論だけなんとなく理解して、「結局、今やったデータの解釈とは?...」という状況になりかねない。
データ分析で必要なことは分析手法を多く知っている事も重要であるが、分析した結果を適切に理解して次のアクションにつなげることが最も大事であると思っている。
結局のところ、実際の仕事ではcsv等のファイルを読み込むことになるので、sklearn datasetsの把握にはあまり時間を割かないでも良いと思うが、個人的な経験上、学習効率が悪くなったの思うので、必要最低限のことをメモしておく。
2. sklearnで用意されているDatasets
2.1. Datasetsの種類
以下のリンクにsklearnで使用可能なdatasetsの一覧が用意されている。
Loaders datasets.clear_data_home([data_home]) Delete all the content of the data home cache. datasets.dump_svmlight_file(X, y, f, *[, …]) Dump the dataset in svmlight / libsvm file format. datasets.fetch_20newsgroups(*[, data_home, …]) Load the filenames and data from the 20 newsgroups dataset (classification). datasets.fetch_20newsgroups_vectorized(*[, …]) Load the 20 newsgroups dataset and vectorize it into token counts (classification). datasets.fetch_california_housing(*[, …]) Load the California housing dataset (regression).
API Reference — scikit-learn 0.23.1 documentation
左側には呼出方法、右側にはDatasetsの説明が記載してある。
Datasetsには括弧書きでどのような目的で使用するのか、の補足が記載されているものもある。
主に2つ把握しておけばOK。
- 回帰(regression)
- クラスタリング(classification)
3. Datasetsの中身をのぞいてみる(load_iris)
アヤメの花のDatasetsを例にとって確認してみる。
3.1. load_irisの全体像
Referenceの最初には以下の情報がある。
Classes 3 Samples per class 50 Samples total 150 Dimensionality 4 Features real, positive
1クラス50個のデータが3クラス存在していて、合計150個のデータが存在している。
Dimensionality(次元)がデータの種類数。それぞれのデータは4つの説明変数があるという事。
3.2. Datasetsの中身(load_iris)
以下のコードでdataの内容確認が可能。
from sklearn.datasets import load_iris iris = load_iris() iris
出力結果詳細は省略するが、以下の値が出力される。
* feature_names: dataを説明する名称
* data: data。説明変数となるデータ
* target_names: 目的変数を説明する名称
* target: 目的変数となるデータ
* DESCR:データの詳細
* filename:sklearnのdatasetsの格納場所がある。実はcsvファイルであることがわかる
ここで、以下の問題が出てくる。
- DESCRについて、改行が無視されているので読みにくい
- data(説明変数)とtarget(目的変数)の関係性がわかりにくい。
そこで、以下の方法でデータを読みやすくする。
4. データを読みやすくする
4.1. Datasetsの中身(load_iris)
irisデータに対して、DESCRを指定する事で詳細のみを表示させることが可能。
from sklearn import datasets iris = datasets.load_iris() print(iris.DESCR)
4.2. pandasのDataFrame形式に変換する
pandasのDataFrameを利用する。
columnsに、dataのラベルとなる「feature_names」を指定する。
もう一つ列を増やし、各データの目的変数として「iris.target」を指定する。
import pandas as pd from sklearn.datasets import load_iris iris_df = pd.DataFrame(iris.data, columns=iris.feature_names) iris_df['class'] = iris.target iris_df.sample(5, random_state=1)
sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) | class | |
---|---|---|---|---|---|
14 | 5.8 | 4.0 | 1.2 | 0.2 | 0 |
98 | 5.1 | 2.5 | 3.0 | 1.1 | 1 |
75 | 6.6 | 3.0 | 4.4 | 1.4 | 1 |
16 | 5.4 | 3.9 | 1.3 | 0.4 | 0 |
131 | 7.9 | 3.8 | 6.4 | 2.0 | 2 |
classを0〜2で表現しているが、それぞれが何に該当するのかをデータに入れてみても良いと思われる。
import pandas as pd from sklearn.datasets import load_iris iris_df = pd.DataFrame(iris.data, columns=iris.feature_names) iris_df['species'] = [iris.target_names[i] for i in iris.target] iris_df.sample(5, random_state=1)
sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) | species | |
---|---|---|---|---|---|
14 | 5.8 | 4.0 | 1.2 | 0.2 | setosa |
98 | 5.1 | 2.5 | 3.0 | 1.1 | versicolor |
75 | 6.6 | 3.0 | 4.4 | 1.4 | versicolor |
16 | 5.4 | 3.9 | 1.3 | 0.4 | setosa |
131 | 7.9 | 3.8 | 6.4 | 2.0 | virginica |
このようにして、DataFrame形式で可視化する事で少々データがみやすくなったのではないかと思う。
あまりきれいでないcsvファイルを取り扱う時、一度DataFrame形式hへ変換してデータの内容をしっかりと把握するのもてだと感じる。