0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

機械学習ライブラリ Scikit-learn (サイキット・ラーン) 基本的なこと / よく使うコマンド

Posted at

Scikit-learn (サイキット・ラーン) は、Pythonで書かれたオープンソースの機械学習ライブラリで、分類、回帰、クラスタリング、次元削減などの多様な機械学習アルゴリズムを提供しています。シンプルで統一されたAPIが特徴で、Pythonの科学計算ライブラリであるNumPy、SciPy、Matplotlibと密接に連携しています。

Scikit-learnの基本的な事

統一されたAPI: Scikit-learnの大きな特徴は、すべての推定器(モデル)が共通のAPIを持っていることです。これにより、異なるモデルでも同様の操作で扱え、コードの再利用性が高まります。

  • estimator.fit(X, y): モデルをデータに適合(学習)させます。Xは特徴量、yはターゲット変数です。

  • estimator.predict(X): 学習済みモデルを使って新しいデータの予測を行います。

  • estimator.score(X, y): モデルの性能を評価します。回帰モデルならR^2スコア、分類モデルなら正解率などが返されます。

  • estimator.transform(X): 主に前処理や次元削減で使われます。

  • estimator.fit_transform(X, y): fitとtransformを同時に行います。

豊富なアルゴリズム:

  • 分類 (Classification): SVM (サポートベクトルマシン), ロジスティック回帰, 決定木, ランダムフォレスト, K近傍法など

  • 回帰 (Regression): 線形回帰, リッジ回帰, ラッソ回帰, 決定木回帰, SVR (サポートベクトル回帰) など

  • クラスタリング (Clustering): K-means, DBSCAN, 階層的クラスタリングなど

  • 次元削減 (Dimensionality Reduction): PCA (主成分分析), t-SNE, LDAなど

  • モデル選択と評価 (Model Selection and Evaluation): 交差検定, グリッドサーチ, 精度指標 (適合率、再現率、F1スコアなど)

  • 前処理 (Preprocessing): スケーリング, 標準化, 欠損値補完, 特徴量エンジニアリングなど

Scikit-learnのよく使うコマンド

以下は、Scikit-learnでよく使われるコマンドやモジュールの例です。

  1. データセットの準備

Scikit-learnは、学習用にいくつかのサンプルデータセットを提供しています。


from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# Irisデータセットの読み込み
iris = load_iris()
X = iris.data  # 特徴量
y = iris.target  # ターゲット変数

# 訓練データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
  1. モデルのインスタンス化と学習

from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier

# ロジスティック回帰モデルのインスタンス化
model_lr = LogisticRegression(max_iter=200) # 収束しない場合はmax_iterを増やす
# サポートベクトルマシンモデルのインスタンス化
model_svc = SVC()
# ランダムフォレストモデルのインスタンス化
model_rf = RandomForestClassifier(n_estimators=100)

# モデルの学習 (fit)
model_lr.fit(X_train, y_train)
model_svc.fit(X_train, y_train)
model_rf.fit(X_train, y_train)
  1. 予測

# 予測 (predict)
y_pred_lr = model_lr.predict(X_test)
y_pred_svc = model_svc.predict(X_test)
y_pred_rf = model_rf.predict(X_test)
  1. モデルの評価

from sklearn.metrics import accuracy_score, classification_report, confusion_matrix

# 精度 (accuracy)
accuracy_lr = accuracy_score(y_test, y_pred_lr)
accuracy_svc = accuracy_score(y_test, y_pred_svc)
accuracy_rf = accuracy_score(y_test, y_pred_rf)

print(f"Logistic Regression Accuracy: {accuracy_lr:.4f}")
print(f"SVC Accuracy: {accuracy_svc:.4f}")
print(f"Random Forest Accuracy: {accuracy_rf:.4f}")

# 詳細な分類レポート
print("\nLogistic Regression Classification Report:")
print(classification_report(y_test, y_pred_lr, target_names=iris.target_names))

# 混同行列
print("\nLogistic Regression Confusion Matrix:")
print(confusion_matrix(y_test, y_pred_lr))
  1. 前処理

from sklearn.preprocessing import StandardScaler, MinMaxScaler

# 標準化 (StandardScaler) - 平均を0、標準偏差を1にする
scaler_std = StandardScaler()
X_train_scaled_std = scaler_std.fit_transform(X_train)
X_test_scaled_std = scaler_std.transform(X_test)

# 最小最大スケーリング (MinMaxScaler) - 値を0から1の範囲にスケーリング
scaler_minmax = MinMaxScaler()
X_train_scaled_minmax = scaler_minmax.fit_transform(X_train)
X_test_scaled_minmax = scaler_minmax.transform(X_test)

print("\nOriginal X_train sample:", X_train[0])
print("Standard Scaled X_train sample:", X_train_scaled_std[0])
print("MinMax Scaled X_train sample:", X_train_scaled_minmax[0])
  1. パイプライン

複数のステップ(前処理とモデル学習など)を連結して、コードを簡潔にし、エラーを防ぐのに役立ちます。


from sklearn.pipeline import Pipeline

# StandardScalerとLogisticRegressionを組み合わせたパイプライン
pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('logreg', LogisticRegression(max_iter=200))
])

# パイプラインの学習
pipeline.fit(X_train, y_train)

# パイプラインを使った予測と評価
y_pred_pipeline = pipeline.predict(X_test)
accuracy_pipeline = accuracy_score(y_test, y_pred_pipeline)
print(f"\nPipeline (StandardScaler + Logistic Regression) Accuracy: {accuracy_pipeline:.4f}")
  1. 交差検定とハイパーパラメータチューニング

from sklearn.model_selection import GridSearchCV

# ハイパーパラメータの候補
param_grid = {
    'C': [0.1, 1, 10, 100],  # 正則化の強さ (Cは小さいほど正則化が強い)
    'penalty': ['l1', 'l2']  # 正則化の種類
}

# GridSearchCVのインスタンス化 (ロジスティック回帰の例)
# cv: 交差検定の分割数, scoring: 評価指標
grid_search = GridSearchCV(LogisticRegression(solver='liblinear', max_iter=200), param_grid, cv=5, scoring='accuracy')

# グリッドサーチの実行
grid_search.fit(X_train, y_train)

# 最適なハイパーパラメータとスコア
print(f"\nBest parameters for Logistic Regression: {grid_search.best_params_}")
print(f"Best cross-validation accuracy: {grid_search.best_score_:.4f}")

# 最適なモデルでの予測
best_model = grid_search.best_estimator_
y_pred_best = best_model.predict(X_test)
accuracy_best = accuracy_score(y_test, y_pred_best)
print(f"Test accuracy with best model: {accuracy_best:.4f}")

Scikit-learnのサンプル使用例はこちら


1891年 ヴィクトリア朝のシャーロックホームズの世界に3名の生成AIが突如現れる。
現代社会の不可思議なビジネス課題をこの3名の生成AIが謎に迫る

  • 実際にプロダクトで機械学習を使用しているのはこちらでトレンドドライン出力に使用しています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?