Iris品種分類
分類Irs品種
scikit-learnによって提供されるデータ.scikit-learningが提供するデータは、次のリンクで見つけることができます.
Scikit-ラーニングデータセット
データの確認
scikit-learningの例示的なデータセットは、
sklearn
ライブラリのdatasets
パケットに存在する.from sklearn.datasets import load_iris
iris = load_iris()
iris.keys()
/------------------------------------/
# 출력
dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])
iris
には、data
、target
、frame
、target_names
、DESCR
、feature_names
の計7つの情報が含まれている.データのサイズを決定するには、
filename
を使用します.iris_data = iris.data
print(iris_data.shape)
/--------------------/
# 출력
(150, 4)
合計150個のデータで4個の情報が含まれていることを確認できます.iris_data[100]
/------------/
# 출력
array([6.3, 3.3, 6. , 2.5])
各データは、.shape
、sepal length
、sepal width
、petal length
の順である.この情報を用いて,機械学習モデルが花弁,萼の長さ,幅情報を入力すると,ペン花の品種が出力される.ここで、モデルが出力する答えをラベル(label)またはターゲット(target)と呼ぶ.
ペンデータでは、ターゲット情報は、以下に示すように、
petal width
と見なすことができる.iris_label = iris.target
print(iris_label.shape)
iris_label
/----------------------/
# 출력
(150,)
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
ラベル名はtarget
と確認できます.iris.target_names
/---------------/
# 출력
array(['setosa', 'versicolor', 'virginica'], dtype='<U10')
データの準備
target_names
データは2次元データなので、iris
を使用してデータを準備します.import pandas as pd
iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)
iris_df
/----------------------------------------------------------------/
# 출력
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2
... ... ... ... ...
145 6.7 3.0 5.2 2.3
146 6.3 2.5 5.0 1.9
147 6.5 3.0 5.2 2.0
148 6.2 3.4 5.4 2.3
149 5.9 3.0 5.1 1.8
150 rows × 4 columns
pandas
を作成する過程で、DataFrame
にdata
を加え、各コラムはiris_data
で命名された.また、解答データも一緒にいれば、データの扱いが便利になるので、label欄が追加されます.
iris_df["label"] = iris.target
iris_df.head()
/----------------------------/
# 출력
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) label
0 5.1 3.5 1.4 0.2 0
1 4.9 3.0 1.4 0.2 0
2 4.7 3.2 1.3 0.2 0
3 4.6 3.1 1.5 0.2 0
4 5.0 3.6 1.4 0.2 0
feature_names
が使用されることが多い.X
が使用されることが多い.scikit−learneは
y
によって簡単に分離することができる.from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris_data,
iris_label,
test_size=0.2,
random_state=7)
print('X_train 개수: ', len(X_train),', X_test 개수: ', len(X_test))
/-----------------------------------------------------------------/
# 출력
X_train 개수: 120 , X_test 개수: 30
train_test_split
は、random_state
およびtrain
を分離する際に適用されるランダム性を決定する.既存のデータに従って分離すると、ラベルが順番に適用され、学習が正常に行われないため、データを分離する際にランダムに混合するプロセスが必要になります.分離したデータを出力します.
y_train, y_test
/-------------/
# 출력
(array([2, 1, 0, 2, 1, 0, 0, 0, 0, 2, 2, 1, 2, 2, 1, 0, 1, 1, 2, 0, 0, 0,
2, 0, 2, 1, 1, 1, 0, 0, 0, 1, 2, 1, 1, 0, 2, 0, 0, 2, 2, 0, 2, 0,
1, 2, 1, 0, 1, 0, 2, 2, 1, 0, 0, 1, 2, 0, 2, 2, 1, 0, 1, 0, 2, 2,
0, 0, 2, 1, 2, 2, 1, 0, 0, 2, 0, 0, 1, 2, 2, 1, 1, 0, 2, 0, 0, 1,
1, 2, 0, 1, 1, 2, 2, 1, 2, 0, 1, 1, 0, 0, 0, 1, 1, 0, 2, 2, 1, 2,
0, 2, 1, 1, 0, 2, 1, 2, 1, 0]),
array([2, 1, 0, 1, 2, 0, 1, 1, 0, 1, 1, 1, 0, 2, 0, 1, 2, 2, 0, 0, 1, 2,
1, 2, 2, 2, 1, 1, 2, 2]))
test
がランダムに混ざっていることが確認できます.学習モデル
分類モデルの基本決定ツリーを使用します.
from sklearn.tree import DecisionTreeClassifier
decision_tree = DecisionTreeClassifier(random_state=32)
decision_tree.fit(X_train, y_train)
/-----------------------------------------------------/
# 출력
DecisionTreeClassifier(random_state=32)
モデル評価
y_pred = decision_tree.predict(X_test)
y_pred
/------------------------------------/
# 출력
array([2, 1, 0, 1, 2, 0, 1, 1, 0, 1, 2, 1, 0, 2, 0, 2, 2, 2, 0, 0, 1, 2,
1, 1, 2, 2, 1, 1, 2, 2])
予測データと正解データを比較し、精度を測定する.from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
accuracy
/----------------------------------------/
# 출력
0.9
精度は、総数の対の個数の数値を表します.Reference
この問題について(Iris品種分類), 我々は、より多くの情報をここで見つけました https://velog.io/@jklee1881/Iris-품종-분류テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol