非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【Python/scikit-learn】Irisデータセットで学ぶ機械学習の基本:特徴量と可視化

   

scikit-learnのload_irisは、アヤメ(Iris)データセットを読み込む関数です。このデータセットは、機械学習の分類タスクにおける定番のデータセットで、3種類のアヤメの花(Iris-setosa, Iris-versicolor, Iris-virginica)を識別する問題に使用されます。

各サンプルには4つの特徴量(花弁とがく片の長さと幅)が含まれており、これを基に3つのアヤメの品種を分類する問題です。

load_iris 関数の基本的な説明

load_iris 関数を呼び出す際は以下のimport文を使います。

from sklearn.datasets import load_iris
 

 

load_iris 関数の使用例

以下は、load_irisを使ってデータを読み込み、簡単な機械学習モデル(決定木)を構築し、予測を行う例です。

# 必要なライブラリのインポート
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

# Irisデータセットの読み込み
iris = load_iris()

# データの確認
print(iris.feature_names)  # 特徴量名の確認
print(iris.target_names)   # ターゲット名の確認

# 特徴量とターゲットの分割
X = iris.data  # 特徴量データ
y = iris.target  # ターゲット(クラスラベル)

# 訓練データとテストデータの分割(8割訓練用、2割テスト用)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 決定木分類器の作成
clf = DecisionTreeClassifier()

# モデルの訓練
clf.fit(X_train, y_train)

# テストデータで予測
y_pred = clf.predict(X_test)

# モデルの精度を確認
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")
 

 

  • load_iris()でデータセットをロードし、Xに特徴量、yにターゲットを格納します。
  • train_test_split()でデータを訓練セットとテストセットに分割します。
  • DecisionTreeClassifier()を使って決定木モデルを構築し、訓練セットで学習します。
  • テストセットに対して予測を行い、その精度をaccuracy_scoreで計算します。

出玉結果は以下の通りです。

['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
['setosa' 'versicolor' 'virginica']
Accuracy: 1.00
 

 

Irisデータセットの各名称の意味は以下のようになります:

  • sepal length: がく片の長さ
  • sepal width: がく片の幅
  • petal length: 花弁の長さ
  • petal width: 花弁の幅

データの可視化

特徴量の可視化もデータの理解を深めるために役立ちます。

以下のソースコードを先程のソースコードの後ろに追加してみてください。全ての特徴量での可視化することができます。

import seaborn as sns
import pandas as pd

# データをPandasのDataFrameに変換
iris_df = pd.DataFrame(X, columns=iris.feature_names)
iris_df['species'] = iris.target

# ペアプロットで全特徴量を可視化
sns.pairplot(iris_df, hue='species', markers=['o', 's', 'D'])
plt.show()
 

 

 

実行すると以下のチャートが現れます。

  • 0(薄いピンク色の丸): Iris-setosa
  • 1(紫色の四角): Iris-versicolor
  • 2(濃い紫色のダイヤ): Iris-virginica

Iris-setosa(ピンク色)は、特にペタル(花弁)の特徴(長さと幅)で他の2つの品種とは明確に分離されています。Iris-versicolor(紫色の四角)とIris-virginica(濃い紫のダイヤ)は、ペタルの特徴量ではある程度分離されていますが、がく片(sepal)の特徴量では重なりがあるため区別が難しい部分もあります。特にpetal lengthとpetal widthのプロットでは、3つの品種の分離が非常に良好であることが確認でき、これらの特徴量が分類において有効であることがわかります。

 

Irisデータセットの特徴量を理解し、可視化を行うことで、データの構造や分類の難しさが明確になります。ぜひ、実際にデータ分析を試して、分類モデルの構築に挑戦してみましょう。

 

スポンサーリンク

 - Python