【機械学習入門 第1回】AIプログラミングへの扉!Scikit-learnではじめる機械学習の第一歩 🤖
「データ分析の次に、よく聞く『機械学習』って何だろう?」
「PythonでAIや未来予測みたいなことって、本当にできるの?」
「Scikit-learn(サイキットラーン)って名前は聞くけど、何から始めればいいかわからない…」
こんにちは! Python探検隊、隊長のPythonistaです! これまで私たちは、NumPyで数値を操り、Pandasでデータを自在に整形・分析し、Matplotlibでその結果を可視化する、というデータサイエンスの強力な武器を手に入れてきましたね。
今回から始まる新シリーズでは、いよいよその集大成として、データサイエンスの頂とも言える「機械学習 (Machine Learning)」の世界に足を踏み入れます! 機械学習とは、データの中からパターンをコンピュータ自身に「学習」させ、未知のデータに対して予測や判断を行わせる技術です。そして、その冒険の最高のパートナーとなるのが、Pythonで最も有名で使いやすい機械学習ライブラリ、Scikit-learn (サイキットラーン) です。
第1回となる今回は、まず「機械学習とは何か?」という基本的な概念を理解し、Scikit-learnのインストールと、その驚くほど一貫性のあるシンプルな使い方(API)を体験します。この記事を読み終える頃には、あなたはAI・機械学習の世界への確かな第一歩を踏み出しているはずです!
1. 機械学習とは? - コンピュータがデータから「学ぶ」ということ
機械学習 (Machine Learning, ML) とは、人間が全てのルールを明示的にプログラムするのではなく、データを与えて、そのデータに潜むパターンや法則をコンピュータ自身に学習させ、その学習結果を元に未知のデータに対する予測や分類を行わせる技術のことです。
例えば、「迷惑メールフィルター」を考えてみましょう。人間が「『儲かる』という単語が入っていたら迷惑メール」「『当選おめでとう』なら迷惑メール」…と無限にルールを書くのは不可能です。そこで、大量の「迷惑メール」と「普通のメール」のサンプルをコンピュータに見せて、「これが迷惑メールの特徴だよ」と学習させます。すると、コンピュータは自らパターンを見つけ出し、新しいメールが来た時にそれが迷惑メールかどうかを高い精度で判断できるようになります。これが機械学習の基本的な考え方です。
1.1. 機械学習の主な種類:教師あり学習と教師なし学習
機械学習には様々な手法がありますが、大きく分けて以下の2種類を覚えておくと良いでしょう。
- 教師あり学習 (Supervised Learning):
「正解ラベル付き」のデータ(入力データと、それに対応する正解の出力)を使って学習する手法です。迷惑メールフィルターの例のように、「このメールは迷惑メール(正解ラベル)」というデータで学習します。目的は、新しい入力データに対して、正しい出力を予測することです。
- 回帰 (Regression): 連続する数値(株価、気温、家の価格など)を予測する問題。
- 分類 (Classification): データがどのカテゴリに属するか(迷惑メールか否か、犬か猫か、病気か否かなど)を予測する問題。
- 教師なし学習 (Unsupervised Learning):
「正解ラベルなし」のデータから、データそのものの構造やパターン、関係性を見つけ出す手法です。
- クラスタリング (Clustering): データを似たもの同士のグループに分ける(顧客のセグメンテーションなど)。
多くの実用的な問題は「教師あり学習」で解決されており、このシリーズでも、まずは教師あり学習を中心に進めていきます。
2. Scikit-learn:Python機械学習の頼れる相棒
Scikit-learn (サイキットラーン) は、Pythonのための無料でオープンソースの機械学習ライブラリです。数多くの機械学習アルゴリズムを、シンプルで一貫性のあるインターフェースで提供しており、初心者からプロフェッショナルまで広く使われています。
Scikit-learnが初心者におすすめな理由:
- シンプルで一貫したAPI: 多くの異なるアルゴリズムが、
fit()
(学習)、predict()
(予測)といった共通のメソッド名で使えるように設計されており、非常に学びやすいです。 - 豊富なアルゴリズム: 回帰、分類、クラスタリング、次元削減など、主要な機械学習の手法を幅広くカバーしています。
- エコシステムとの連携: NumPy, SciPy, Pandas, Matplotlibといった、私たちが学んできたデータサイエンスのライブラリ群とシームレスに連携できます。
- 優れたドキュメント: 公式ドキュメントやチュートリアル、サンプルコードが非常に充実しており、学習の助けになります。
まずは、この頼れる相棒をインストールしましょう。
pip install scikit-learn
多くの場合、PandasやMatplotlibと一緒にインストールすることが推奨されます。(pip install scikit-learn pandas matplotlib
)
3. Scikit-learnの基本作法:一貫したAPIを体験しよう
Scikit-learnの美しさは、その一貫した操作方法にあります。どんなに複雑なモデルでも、基本的な使い方はほとんど同じです。
3.1. Scikit-learnの基本的な流れ(5ステップ)
機械学習モデルの利用は、基本的に以下のステップで進みます。
- モデルの選択とインポート: 使いたい機械学習モデルのクラスをScikit-learnからインポートします。
- モデルのインスタンス化: インポートしたクラスから、モデルのインスタンス(オブジェクト)を作成します。
- データの準備: データを「特徴量 (説明変数)
X
」と「ターゲット (目的変数)y
」に分けます。X
: 予測の元となるデータ(例: 家の広さ、部屋数)。通常2次元のNumPy配列。y
: 予測したい正解データ(例: 家の価格)。通常1次元のNumPy配列。
- モデルの学習 (
.fit()
): 用意したデータX
とy
を使って、モデルにパターンを学習させます。 - 予測 (
.predict()
): 学習済みのモデルを使って、新しい未知のデータnew_X
に対する予測結果を得ます。
3.2. 「Hello, Machine Learning!」- 超シンプルな例で体験
この流れを、非常に簡単な「y = 2x」という関係性を学習する例で体験してみましょう。
import numpy as np
from sklearn.linear_model import LinearRegression # 1. モデルをインポート
# 3. データを準備
# 特徴量 X (入力)。Scikit-learnでは2次元配列にするのが基本。
X_train = np.array([[1], [2], [3], [4]])
# ターゲット y (正解)。1次元配列。
y_train = np.array([2, 4, 6, 8])
# 2. モデルのインスタンス化
model = LinearRegression()
print(f"モデルの準備完了: {model}")
# 4. モデルの学習
model.fit(X_train, y_train)
print("\nモデルの学習が完了しました!")
print(f"学習したモデルの傾き (係数): {model.coef_}") # ほぼ [2.] になるはず
print(f"学習したモデルの切片: {model.intercept_}") # ほぼ 0.0 になるはず
# 5. 新しいデータで予測
X_new = np.array([[5], [10]]) # 5と10に対するyの値を予測したい
predictions = model.predict(X_new)
print(f"\n新しいデータ {X_new.flatten()} に対する予測値: {predictions}")
実行結果 (例):
モデルの準備完了: LinearRegression()
モデルの学習が完了しました!
学習したモデルの傾き (係数): [2.]
学習したモデルの切片: 2.220446049250313e-16 (ほぼ0)
新しいデータ [ 5 10] に対する予測値: [10. 20.]
完璧ですね!モデルはデータから「y=2x」という関係性を見事に学習し、新しいデータ「5」と「10」に対して、正しい予測値「10」と「20」を返すことができました。これがScikit-learnの基本的な流れです。
4. 準備は万端!Scikit-learnに付属のデータセット
機械学習の練習やアルゴリズムのテストのために、Scikit-learnにはいくつかの有名な「トイデータセット(おもちゃのデータセット)」が付属しています。これらを使うことで、自分でデータを探してくる手間なく、すぐに学習を始められます。
from sklearn.datasets import load_iris
# アヤメ(Iris)のデータセットをロード
iris_dataset = load_iris()
# データセットは辞書のようなオブジェクトになっている
print("\n--- アヤメ(Iris)データセットの概要 ---")
print(f"特徴量の名前: {iris_dataset.feature_names}")
print(f"ターゲット(品種)の名前: {iris_dataset.target_names}")
# データの形状を確認
X_iris = iris_dataset.data
y_iris = iris_dataset.target
print(f"特徴量Xの形状: {X_iris.shape}") # (150, 4) -> 150サンプル, 4つの特徴量
print(f"ターゲットyの形状: {y_iris.shape}") # (150,) -> 150個の正解ラベル
print("\n最初の5サンプルのデータ:")
print(X_iris[:5])
他にも、住宅価格予測で使われるカリフォルニア住宅データセット(fetch_california_housing
)や、手書き数字認識で使われる数字データセット(load_digits
)などがあります。これらのデータセットを使って、次回以降、本格的なモデル構築に挑戦していきます。
まとめと次回予告
今回は、機械学習入門シリーズの第1回として、機械学習の扉を開きました。
- 機械学習とは、データからパターンを学び、予測を行う技術であること。
- 主な種類として、正解データ付きで学ぶ「教師あり学習」(回帰・分類)があること。
- Scikit-learnが、Pythonで機械学習を行うための、一貫性があり使いやすい強力なライブラリであること。
- モデルの利用は、「インポート → インスタンス化 → 学習(
fit
) → 予測(predict
)」というシンプルな流れであること。
これで、あなたも機械学習モデルを訓練し、予測を行うための基本的な手順を理解しました。これは、データから未来を読み解くエキサイティングな旅の始まりです。
さて、基本的な概念とAPIの流れを理解したところで、いよいよ最初の**本格的な予測モデル**の構築に挑戦します! 次回、第2回では、**「回帰(Regression)」**という、連続する数値を予測するタスクに取り組みます。現実の住宅価格データセットを使い、最も基本的で強力なモデルである「線形回帰」モデルを構築して、住宅価格の予測に挑戦します。コンピュータに家の価値を見積もらせることはできるのでしょうか?次回をお楽しみに!
コメント
コメントを投稿