ななぶろ

-お役立ち情報を気楽に紹介するブログ-

初心者から中級者の機械学習プログラム例:Scikit-learn を活用する

www.amazon.co.jp

はじめに

機械学習は、データからパターンを学習し、予測や意思決定を行うための強力なツールです。近年、その応用範囲は急速に拡大しており、ビジネス、医療、金融など、様々な分野で活用されています。しかし、「機械学習」という言葉を聞いても、具体的なイメージがわかない方も多いのではないでしょうか?

本記事では、PythonのライブラリであるScikit-learn(以下、sklearn)を用いて、初心者から中級者向けの機械学習プログラム例を紹介します。sklearnは、様々な機械学習アルゴリズムを簡単に利用できるため、機械学習の入門に最適なツールです。

1. 機械学習とは?

まず、機械学習とは何かを簡単に説明します。機械学習は、人間が明示的にプログラミングしなくても、コンピュータがデータから学習する能力のことです。例えば、大量の画像データを与えれば、コンピュータは自動的に猫や犬などの画像を識別できるようになります。

機械学習には、大きく分けて以下の3つの種類があります。

  • 教師あり学習: 正解ラベル付きのデータを用いて学習します。分類問題(例:メールのスパム判定)や回帰問題(例:住宅価格の予測)などに応用されます。
  • 教師なし学習: 正解ラベルのないデータを用いて学習します。クラスタリング(例:顧客セグメンテーション)や次元削減(例:データの可視化)などに応用されます。
  • 強化学習: エージェントが環境と相互作用しながら、報酬を最大化するように学習します。ゲームAIやロボット制御などに用いられます。

本記事では、最も基本的な教師あり学習に焦点を当てます。

2. Scikit-learn とは?

sklearnは、Pythonで機械学習を行うための強力なライブラリです。様々な機械学習アルゴリズム(分類、回帰、クラスタリングなど)を実装しており、データの前処理、モデルの評価、ハイパーパラメータの調整なども行うことができます。

sklearnの特徴としては、以下の点が挙げられます。

  • 使いやすさ: シンプルで直感的なAPIを提供しており、初心者でも比較的簡単に機械学習モデルを構築できます。
  • 豊富なアルゴリズム: 様々な種類の機械学習アルゴリズムが実装されています。
  • 高いパフォーマンス: 効率的な実装により、大規模なデータセットに対しても高速に処理できます。
  • 活発なコミュニティ: 多くのユーザーや開発者がおり、情報交換やサポートを受けやすい環境です。

sklearnのインストールは、pipコマンドで簡単に行えます。

pip install scikit-learn

3. 機械学習プログラム例:住宅価格の予測(回帰問題)

ここでは、住宅の特徴量(広さ、部屋数、築年数など)から住宅価格を予測する回帰問題を考えます。sklearnを用いて、線形回帰モデルを構築し、予測精度を評価します。

3.1 データセットの準備

まず、学習用のデータセットを用意する必要があります。今回は、sklearnに組み込み済みのCalifornia Housing Datasetを使用します。このデータセットは、カリフォルニア州の住宅価格に関する情報を含んでいます。

from sklearn.datasets import CaliforniaHousing
housing = CaliforniaHousing()
X = housing.data  # 特徴量
y = housing.target # ターゲット変数(住宅価格)

3.2 データの前処理

機械学習アルゴリズムは、数値データに対してのみ適用できます。そのため、必要に応じてデータの変換やスケーリングなどの前処理を行う必要があります。今回は、特徴量のスケールを揃えるために、標準化を行います。

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

3.3 モデルの構築と学習

次に、線形回帰モデルを構築し、学習データを用いて学習させます。

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_scaled, y)

3.4 予測

学習済みのモデルを用いて、新しい住宅価格を予測します。

import numpy as np
new_housing = np.array([[500], [3], [20]]) # 新しい住宅の特徴量(例)
new_housing_scaled = scaler.transform(new_housing)
predicted_price = model.predict(new_housing_scaled)[0]
print("予測される住宅価格:", predicted_price)

3.5 モデルの評価

モデルの性能を評価するために、テストデータを用いて予測精度を測定します。今回は、データを学習用とテスト用に分割し、テストデータに対する予測精度を評価します。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2) # 8:2で分割

model = LinearRegression()
model.fit(X_train, y_train)

y_pred = model.predict(X_test)

from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_test, y_pred)
print("平均二乗誤差:", mse)

4. 機械学習プログラム例:アヤメの種類を分類(分類問題)

ここでは、アヤメのデータセットを用いて、アヤメの種類を分類する問題を考えます。sklearnを用いて、ロジスティック回帰モデルを構築し、予測精度を評価します。

4.1 データセットの準備

アヤメのデータセットは、sklearnに組み込み済みのirisデータセットを使用します。このデータセットは、アヤメの花びらの長さや幅などの情報を含んでいます。

from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data  # 特徴量
y = iris.target # ターゲット変数(アヤメの種類)

4.2 データの前処理

今回は、特徴量のスケールを揃えるために、標準化を行います。

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

4.3 モデルの構築と学習

次に、ロジスティック回帰モデルを構築し、学習データを用いて学習させます。

from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_scaled, y)

4.4 予測

学習済みのモデルを用いて、新しいアヤメの種類を予測します。

import numpy as np
new_iris = np.array([[5.1], [3.5], [1.4]]) # 新しいアヤメの特徴量(例)
new_iris_scaled = scaler.transform(new_iris)
predicted_species = model.predict(new_iris_scaled)[0]
print("予測されるアヤメの種類:", predicted_species)

4.5 モデルの評価

モデルの性能を評価するために、テストデータを用いて予測精度を測定します。今回は、データを学習用とテスト用に分割し、テストデータに対する予測精度を評価します。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2) # 8:2で分割

model = LogisticRegression()
model.fit(X_train, y_train)

y_pred = model.predict(X_test)

from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y_test, y_pred)
print("正解率:", accuracy)

5. まとめと今後の学習

本記事では、sklearnを用いて、住宅価格の予測(回帰問題)とアヤメの種類を分類(分類問題)という2つの機械学習プログラム例を紹介しました。これらの例を通して、機械学習の基本的な流れ(データセットの準備、データの前処理、モデルの構築と学習、予測、モデルの評価)を理解できたかと思います。

機械学習は奥が深く、様々なアルゴリズムやテクニックが存在します。今後、さらに学習を進めることで、より複雑な問題を解決できるようになるでしょう。

6. 参考文献

7. 補足

  • 上記はあくまで基本的な例です。実際の問題では、より複雑なデータの前処理や特徴量エンジニアリングが必要になる場合があります。
  • モデルの選択やハイパーパラメータの調整も重要です。様々なアルゴリズムを試したり、グリッドサーチなどの手法を用いて最適なパラメータを見つける必要があります。
  • 機械学習は、データの品質に大きく依存します。質の高いデータを用意することが、良いモデルを構築するための重要な要素です。

本記事が、機械学習の学習の一助となれば幸いです。頑張ってください!