7-2

scikit-learnライブラリ

機械学習の基本フロー📊データ準備✂️分割🤖学習 fit()🔮予測 predict📏評価

scikit-learnとは

scikit-learn(sklearn)は、Pythonの機械学習ライブラリです。分類・回帰・クラスタリング・次元削減など、多くのアルゴリズムが含まれています。

python
import sklearnsklearn.__version__

機械学習の基本的な流れ

  1. データの準備:訓練データとテストデータに分割
  2. モデルの選択:使用するアルゴリズムを選ぶ
  3. モデルの学習fit() メソッドで訓練
  4. 予測predict() メソッドで予測
  5. 評価:精度などの指標で評価

データの分割

python
from sklearn.model_selection import train_test_splitX = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]y = [0, 0, 1, 1, 1]# 訓練データ80%、テストデータ20%に分割X_train, X_test, y_train, y_test = train_test_split(    X, y, test_size=0.2, random_state=42)print("訓練データ:", len(X_train))print("テストデータ:", len(X_test))

分類:k近傍法(KNN)

python
from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.metrics import accuracy_score# アヤメデータセットの読み込みiris = load_iris()X, y = iris.data, iris.target# データ分割X_train, X_test, y_train, y_test = train_test_split(    X, y, test_size=0.3, random_state=42)# KNNモデルの作成と学習model = KNeighborsClassifier(n_neighbors=3)model.fit(X_train, y_train)# 予測と評価y_pred = model.predict(X_test)accuracy = accuracy_score(y_test, y_pred)print(f"正解率: {accuracy:.3f}")

分類:決定木

python
from sklearn.tree import DecisionTreeClassifierfrom sklearn.metrics import classification_report# 決定木モデルclf = DecisionTreeClassifier(max_depth=3, random_state=42)clf.fit(X_train, y_train)y_pred = clf.predict(X_test)print(classification_report(y_test, y_pred,                            target_names=iris.target_names))

回帰:線形回帰

python
from sklearn.datasets import load_diabetesfrom sklearn.linear_model import LinearRegressionfrom sklearn.metrics import mean_squared_error, r2_scoreimport numpy as np# 糖尿病データセットdiabetes = load_diabetes()X, y = diabetes.data, diabetes.targetX_train, X_test, y_train, y_test = train_test_split(    X, y, test_size=0.2, random_state=42)# 線形回帰モデルmodel = LinearRegression()model.fit(X_train, y_train)y_pred = model.predict(X_test)mse = mean_squared_error(y_test, y_pred)r2 = r2_score(y_test, y_pred)print(f"MSE: {mse:.1f}")print(f"R²: {r2:.3f}")

クラスタリング:k-means

python
from sklearn.cluster import KMeansfrom sklearn.datasets import make_blobs# サンプルデータの生成X, _ = make_blobs(n_samples=300, centers=4, random_state=42)# k-meansクラスタリングkmeans = KMeans(n_clusters=4, random_state=42, n_init=10)kmeans.fit(X)labels = kmeans.labels_centers = kmeans.cluster_centers_print("クラスタ中心:")print(centers)

データの前処理

python
from sklearn.preprocessing import StandardScaler, MinMaxScaler# 標準化(平均0、標準偏差1)scaler = StandardScaler()X_train_scaled = scaler.fit_transform(X_train)  # fit + transformX_test_scaled = scaler.transform(X_test)         # 訓練データの統計を使ってtransform# Min-Max正規化(0〜1の範囲)minmax = MinMaxScaler()X_normalized = minmax.fit_transform(X_train)

クロスバリデーション

python
from sklearn.model_selection import cross_val_scoremodel = KNeighborsClassifier(n_neighbors=5)scores = cross_val_score(model, X, y, cv=5, scoring="accuracy")print(f"各分割の精度: {scores}")print(f"平均精度: {scores.mean():.3f} ± {scores.std():.3f}")

練習: 手書き数字分類

標準

scikit-learnの手書き数字データセット(load_digits)を使って、サポートベクターマシン(SVM)で分類モデルを作成し、テストデータの精度を求めてください。