sci-kit Learn のiris(アヤメ)データを分類付きでCSVへ保存する
import pandas as pd import numpy as np from sklearn.datasets import load_iris # データセットの読み込み iris = load_iris() # データセットに正解ラベルを追加する # iris.data や iris.target は <numpy.ndarray> 型 # np.append は次元を揃える -> reshape(-1, 1) -> -1 は要素数の自動設定 data = np.append(iris.data, iris.target.reshape(-1, 1), axis=1) # 特徴量の名前を取得(列ラベルにする) ** colLabels = iris.feature_names.copy() # data に targetを追加したので、列ラベルにもtargetを追加する colLabels.append("target") # pandas DataFrameクラスへ格納 df = pd.DataFrame(data, columns=colLabels) # ラベルの名前も DataFrame へ追加する target_names = iris.target_names # 追加する列を確保 df['target_name'] = "" # 種類毎にtargetのインデックス(idx)を探し、DataFrameのidxを指定して追加する for i, target_name in enumerate(target_names): idx = df['target'] == i df.loc[idx, 'target_name'] = str(target_name) # データセットの確認 print(df.head(5)) # # CSV形式で保存 saveFilePath = 'iris.csv' df.to_csv(saveFilePath, encoding="shift-jis")
iris(アヤメ)のデータセットを読み出し、ラベルと種類の名前を追加し、csv形式でファイルへ保存するスクリプトです。
機械学習もまずは、データを読み出して眺めるところから始めましょう。
読み込んだデータの整理には、pandas が非常に便利です。
今回は、csv形式で保存するために正解となるラベル(target)やラベル名(target_name)を列に加えて保存しました。
学習時には、間違って正解ラベルを学習する特徴量に加えないよう、注意してください。
深いコピー(Deep Copy)と浅いコピー(Shallow Copy)
**で示した部分の解説
colLabel = iris.feature_names.copy()
.copy() で深いコピーする。
.copyなしの浅いコピーでは、appendしたとき iris.feature_names の中身まで変わってしまう。
浅いコピーは、C言語ならポインタ渡しを行っているのと同じで、メモリのアドレスのみがコピーされ、メモリ領域を共有する。
深いコピー(.copy())は、実態の複製であり、ここでは iris.feature_names と同じ内容を持った新しいメモリ領域が colLabel に割り当てられる。