ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
scikit-learn の概要
scikit-learn(しばしば sklearn と省略)は、Python における機械学習の事実上の標準ライブラリです。2007 年に David Cournapeau によって始められ、現在は INRIA を中心とした活発なコミュニティによってメンテナンスされています。NumPy / SciPy / matplotlib という Python 科学計算スタックの上に構築され、pandas DataFrame とも自然に連携します。
古典的な機械学習(線形回帰、SVM、ランダムフォレスト、k-means など)は scikit-learn で完結する一方、ディープラーニングは別ライブラリ(PyTorch / TensorFlow / Keras)が担当する、というのが業界の住み分けです。
インストールと基本構成
# pip インストール(依存も含めて自動)
pip install scikit-learn
# Anaconda 環境なら標準で入っている
conda install scikit-learn
# 最新 1.x の確認
python -c "import sklearn; print(sklearn.__version__)"
# → 1.5.x など
scikit-learn は次のライブラリに依存します:
- NumPy — N 次元配列・行列演算
- SciPy — 統計・線形代数・最適化
- joblib — 並列処理・モデル永続化
- threadpoolctl — BLAS スレッド制御
estimator API: fit / predict / score
scikit-learn の最大の魅力は全アルゴリズムに同じインターフェイスが用意されていることです。線形回帰でもランダムフォレストでも同じコード形になります:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
# データロード
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
)
# 学習
clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X_train, y_train)
# 予測
y_pred = clf.predict(X_test)
# スコア(精度)
print(clf.score(X_test, y_test))
# → 0.9777...
このパターンを覚えれば、アルゴリズムを差し替えるだけで他の手法も試せます:
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
for clf in [SVC(), LogisticRegression(max_iter=1000), KNeighborsClassifier()]:
clf.fit(X_train, y_train)
print(type(clf).__name__, clf.score(X_test, y_test))
主要アルゴリズム一覧
| 分類 | 代表的なクラス | 用途 |
|---|---|---|
| 線形モデル | LinearRegression / LogisticRegression / Ridge / Lasso | 回帰・分類の基礎 |
| SVM | SVC / SVR / LinearSVC | 高次元データの分類 |
| 木系 | DecisionTreeClassifier / RandomForestClassifier | 解釈性ある分類・回帰 |
| 勾配ブースティング | GradientBoostingClassifier / HistGradientBoostingRegressor | 表形式データの王道 |
| クラスタリング | KMeans / DBSCAN / AgglomerativeClustering | 教師なしグルーピング |
| 次元削減 | PCA / TruncatedSVD / TSNE | 可視化・特徴圧縮 |
| 近傍法 | KNeighborsClassifier / NearestNeighbors | 近傍ベース推論 |
| ナイーブベイズ | GaussianNB / MultinomialNB | テキスト分類 |
| ニューラル | MLPClassifier / MLPRegressor | 軽量 NN(本格 DL は別ライブラリ) |
特徴量前処理(preprocessing)
多くのアルゴリズムは入力スケールに敏感です。sklearn.preprocessing が前処理ツールを提供します:
from sklearn.preprocessing import StandardScaler, MinMaxScaler, OneHotEncoder
# 標準化(平均0・分散1)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test) # ← test には fit しない
# 0-1 正規化
mm = MinMaxScaler()
X_norm = mm.fit_transform(X_train)
# カテゴリ → One-Hot
ohe = OneHotEncoder(sparse_output=False)
encoded = ohe.fit_transform([['red'], ['blue'], ['green']])
Pipeline と ColumnTransformer
前処理 + モデルをひとつのオブジェクトに連結することで、テストデータ漏れ(data leakage)を防ぎ、クロスバリデーションでも安全に使えます:
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.ensemble import RandomForestClassifier
# 数値列 / カテゴリ列を別処理
preprocessor = ColumnTransformer([
('num', StandardScaler(), ['age', 'income']),
('cat', OneHotEncoder(handle_unknown='ignore'), ['gender', 'country']),
])
pipe = Pipeline([
('prep', preprocessor),
('clf', RandomForestClassifier(random_state=42)),
])
pipe.fit(X_train, y_train)
pipe.score(X_test, y_test)
ハイパーパラメータ探索(GridSearchCV / RandomizedSearchCV)
from sklearn.model_selection import GridSearchCV
param_grid = {
'clf__n_estimators': [50, 100, 200],
'clf__max_depth': [None, 5, 10, 20],
}
gs = GridSearchCV(pipe, param_grid, cv=5, n_jobs=-1, scoring='accuracy')
gs.fit(X_train, y_train)
print(gs.best_params_)
print(gs.best_score_)
best = gs.best_estimator_
best.score(X_test, y_test)
クロスバリデーション
from sklearn.model_selection import cross_val_score, KFold, StratifiedKFold
# 5-fold 交差検証
scores = cross_val_score(clf, X, y, cv=5, scoring='accuracy')
print(scores, scores.mean(), scores.std())
# 層化サンプリング(クラス不均衡時)
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
cross_val_score(clf, X, y, cv=skf)
付属データセット
| 関数 | 内容 | サンプル数 |
|---|---|---|
load_iris() | アヤメ 3 種類の花弁/萼サイズ | 150 |
load_digits() | 8x8 手書き数字 | 1797 |
load_wine() | ワインの化学成分 | 178 |
load_breast_cancer() | 乳がん診断 | 569 |
fetch_california_housing() | カリフォルニア住宅価格 | 20640 |
fetch_openml(...) | OpenML から任意取得 | 各種 |
make_classification() | 分類用の合成データ | 任意 |
make_blobs() | クラスタリング用の塊 | 任意 |
モデルの保存と読込
import joblib
# 保存
joblib.dump(pipe, 'model.joblib')
# 読込
loaded = joblib.load('model.joblib')
loaded.predict(X_test)
pickle でも保存できますが、joblib の方が NumPy 配列を効率的に扱えるため推奨されます。
Jupyter での可視化
import matplotlib.pyplot as plt
from sklearn.metrics import ConfusionMatrixDisplay, RocCurveDisplay
# 混同行列
ConfusionMatrixDisplay.from_estimator(clf, X_test, y_test)
plt.show()
# ROC 曲線(2 値分類)
RocCurveDisplay.from_estimator(clf, X_test, y_test)
plt.show()
# 決定木の可視化
from sklearn.tree import plot_tree, DecisionTreeClassifier
dt = DecisionTreeClassifier(max_depth=3).fit(X, y)
plot_tree(dt, filled=True, feature_names=iris.feature_names)
scikit-learn と他ライブラリの比較
| ライブラリ | 得意領域 | scikit-learn との関係 |
|---|---|---|
| scikit-learn | 古典 ML 全般 | — |
| XGBoost / LightGBM / CatBoost | 高性能 GBDT | sklearn 互換 API あり |
| PyTorch / TensorFlow | ディープラーニング | 役割分担、データ前処理は sklearn |
| statsmodels | 古典統計(p 値・信頼区間) | 解釈重視ならこちら |
| imbalanced-learn | 不均衡データ対策(SMOTE 等) | sklearn と統合的に使う |
FAQ
Q: scikit-learn でディープラーニングはできる?
A: MLPClassifier 等の小規模 NN はありますが、GPU・大規模学習には対応しません。本格的には PyTorch / TensorFlow を使ってください。
Q: なぜ標準化が必要?
A: SVM、k-NN、PCA、ロジスティック回帰などは特徴量スケールに敏感です。木系(RF, GBDT)は不要なことが多いです。
Q: predict_proba と decision_function の違いは?
A: predict_proba は確率 [0,1]、decision_function は決定境界からの距離(マージン)。閾値調整は decision_function が便利です。
Q: GridSearchCV が遅い
A: n_jobs=-1 で並列化、RandomizedSearchCV や HalvingGridSearchCV で探索を間引き、それでも遅ければ Optuna 等のベイズ最適化に切替を検討。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?