Scikit-learn(サイキット・ラーン)は、分類・回帰・クラスタリングなどの機械学習アルゴリズムを、Python から同じ書き方で呼び出せるようにしたオープンソースのライブラリです。行と列に整理された表形式のデータの分類や回帰に使え、データの読み込みから学習・精度の評価までが import を除いて10行ほどで書けます。この記事のコードと出力は、すべて scikit-learn 1.9.1/Python 3.12.13 の環境で実行して得たものです。
まとめ
- 読み方は公式FAQが「sy-kit learn」と明記。sci は science の略。Python の import 名は
sklearn、pip に渡す名前は scikit-learn - 2026年11月時点の最新版は 1.9.1(2026年9月10日公開)。Python 3.11 以上が必要で、3.10 には 1.7.2 までしか入らない
- 分類・回帰・クラスタリング・次元削減・モデル選択・前処理の6領域に、推定器が208個収録されている
- 学習は全推定器が
fit。予測はpredict、変換はtransform。同じ課題ならモデルを差し替えて同じ手順で比較できる(import や前処理の追加が要る場合はある) - 保存した学習済みモデルは、学習時と同じ版の scikit-learn で読み込むのが前提。版が違うと警告が出る
- 深層学習と強化学習は公式が「対象外」と明言。GPU も既定では使わない
Scikit-learnの読み方・名前の由来・開発体制
読み方は「sy-kit learn」
公式FAQの「How do you pronounce the project name?」への回答は「sy-kit learn. sci stands for science!」です。カタカナにすると「サイキット・ラーン」に近く、頭の sci は science(科学)を表します。公式が示しているのは英語の音までで、カタカナ表記の定めはありません。同じFAQは正式な綴りを scikit-learn とし、scikit・SciKit・sci-kit learn はいずれも誤りだと書いています。
「scikit」は、SciPy を土台にした科学計算ツールボックス群(scikits)の系列名です。FAQ は scikit-learn のほかに scikit-image を挙げています。コードの中で書く sklearn は import 名で、パッケージとしての名前は scikit-learn。この2つの使い分けは、インストール時に実害が出ます(後述)。
2007年のGSoCから始まり、直近のマイナー版は半年おき
公式のAboutページによると、プロジェクトは2007年に David Cournapeau 氏の Google Summer of Code として始まりました。2010年に INRIA(フランス国立情報学自動制御研究所)の4人が開発を引き継ぎ、最初の公開版を2010年2月1日にリリースしています。現在は「a thriving international community has been leading the development」、つまり国際的なコミュニティが開発を主導しており、INRIA が持つのは在籍者の貢献分の著作権です。
Aboutページはリリースを「およそ3か月周期」と書いていますが、PyPI の公開履歴を見ると、直近のマイナー版は 1.7.0(2025年6月5日)、1.8.0(2025年12月10日)、1.9.0(2026年6月2日)と半年おきです。間を埋めるのは 1.7.1・1.7.2・1.9.1 のようなバグ修正版です。業務で使うなら、半年ごとに API の追加や非推奨が入る前提で更新の計画を立てます。
ライセンスはBSD 3-Clause
ライセンスは BSD 3-Clause です。インストール後のパッケージメタデータにも License-Expression: BSD-3-Clause と記録されています。商用製品に組み込んでも自社コードの公開義務は生じません。再配布では著作権表示・ライセンス条件・免責条項を保持し、著作権者や貢献者の名称を事前の書面による許可なく派生製品の推奨・宣伝に使わないことが条件です。
Scikit-learnでできること:6つの領域と208個の推定器
公式サイトのトップページは、機能を次の6領域に分けて紹介しています。代表的なクラス・関数・モジュールと合わせると次のとおりです。
| 領域 | 何をするか | 代表的なクラス |
|---|---|---|
| 分類 | どのカテゴリに属するかを当てる | LogisticRegression、RandomForestClassifier、SVC |
| 回帰 | 連続値を予測する | LinearRegression、Ridge、RandomForestRegressor |
| クラスタリング | 似たデータをまとめる | KMeans、HDBSCAN、AgglomerativeClustering |
| 次元削減 | 変数の数を減らす | PCA、NMF、SelectKBest |
| モデル選択 | 比較・検証・パラメータ調整 | GridSearchCV、cross_val_score、metrics |
| 前処理 | 特徴量の抽出と正規化 | StandardScaler、OneHotEncoder、TfidfVectorizer |
収録されている推定器(estimator)の数は、同梱のユーティリティで数えられます。
from sklearn.utils.discovery import all_estimators
for kind in ["classifier", "regressor", "cluster", "transformer"]:
print(kind, len(all_estimators(type_filter=kind)))
print("合計", len(all_estimators()))
classifier 44
regressor 55
cluster 12
transformer 84
合計 208
4種類を足すと195ですが、全体は208です。KMeans のようにクラスタリングと変換の両方に数えられるものが14個あり、逆に GridSearchCV・Pipeline のようなメタ推定器や IsolationForest(外れ値検知)など、どれにも入らないものが27個あるためです。いちばん多いのは変換器(transformer)で、標準化・欠損値補完・One-Hotエンコーディングといった「モデルに渡す前の加工」がモデル本体と同じ作法で書けます。
守備範囲は、行と列に整理済みの表形式データです。画像・音声の生データを扱う機能はほとんどありません。表を作る工程は Pandasのできること・使い方、数値配列の操作は NumPyの基本的な使い方が受け持ちます。
インストールと対応Pythonバージョン
pip・condaのインストール手順とバージョン確認
公式のインストール手順は、仮想環境を作ってから pip で入れる方法と、conda-forge から入れる方法を載せています。NumPy・SciPy・joblib などの依存は自動で入ります。
# pip(macOS・Linuxのbash/zsh向け。condaの手順とは別に選択)
python -m venv sklearn-env
source sklearn-env/bin/activate
pip install -U scikit-learn
# conda
conda create -n sklearn-env -c conda-forge scikit-learn
conda activate sklearn-env
# バージョン確認
python -c "import sklearn; print(sklearn.__version__)"
依存ライブラリまで一覧したいときは sklearn.show_versions() を使います。1.9.1 で実行すると、依存の一覧に narwhals(1.9.0 で加わった DataFrame 入出力のための軽量ライブラリ)が出ます。オフライン環境へホイールを持ち込んでいる場合、1.8 以前の手順のままだとこの依存が足りずにインストールが止まります。1つの環境で pip と conda を混ぜると壊れやすい点は pipとcondaの違いと使い分けで扱っています。
pip install sklearn が失敗する理由
import 名につられて pip install sklearn と打つと失敗します。PyPI の sklearn パッケージ(0.0.post12)は中身のないダミーで、ビルドに入る前にThe 'sklearn' PyPI package is deprecated, use 'scikit-learn' rather than 'sklearn' for pip commands. と表示して異常終了します。requirements.txt に sklearn と書いてある古いプロジェクトは、その行を scikit-learn に書き換えれば通ります。エラー文は環境変数 SKLEARN_ALLOW_DEPRECATED_SKLEARN_PACKAGE_INSTALL=True での回避も案内していますが、依存パッケージ側の修正を待つ間のつなぎです。
Pythonのバージョン別にインストール可能なScikit-learn
「入れたのにバージョンが上がらない」ときは、まず Python の版を疑います。PyPI に登録された各版の requires_python は次のとおりです。
| Pythonの版 | 入る最新のScikit-learn | 理由 |
|---|---|---|
| 3.9 | 1.6.1 | 1.7.0 以降が 3.10 以上を要求 |
| 3.10 | 1.7.2 | 1.8.0 以降が 3.11 以上を要求 |
| 3.11〜3.15 | 1.9.1 | 1.9.1 の要件は 3.11 以上 |
Python 3.10 で pip install scikit-learn を実行すると、pip は条件に合う 1.7.2 をエラーなしで選びます。気づかないまま 1.8 以降の機能をドキュメントで読み、「動かない」と悩むことになります。想定より古い版が入っていたら python --version を確認してください。
使い方の基本:fit・predict・transformの3つのメソッド
分類:アヤメのデータで学習から評価まで
付属のアヤメ(iris)データセットで、読み込み→分割→学習→評価をひととおり通します。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=0, stratify=y
)
model = RandomForestClassifier(n_estimators=100, random_state=0)
model.fit(X_train, y_train)
pred = model.predict(X_test)
print("正解率:", accuracy_score(y_test, pred))
正解率: 0.9777777777777777
fit で学習し、predict で予測します。同じ分割のまま RandomForestClassifier を LogisticRegression(max_iter=1000) や SVC() に替えると、正解率はどちらも 1.0 でした。モデルを作る行に加え、LogisticRegressionを使う場合は from sklearn.linear_model import LogisticRegression、SVCを使う場合は from sklearn.svm import SVC の追加も必要です。random_state は結果を再現するための固定で、stratify=y は分割後もクラスの比率を保つ指定です。
糖尿病データによる線形回帰とランダムフォレストの比較
連続値の予測も書き方は同じです。付属の糖尿病データ(442人×10項目、1年後の病状の進行度を予測)で2つのモデルを比べます。
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import r2_score, mean_absolute_error
X, y = load_diabetes(return_X_y=True)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=0)
for model in [LinearRegression(), RandomForestRegressor(random_state=0)]:
pred = model.fit(X_tr, y_tr).predict(X_te)
print(type(model).__name__,
"R2:", round(r2_score(y_te, pred), 3),
"MAE:", round(mean_absolute_error(y_te, pred), 1))
LinearRegression R2: 0.393 MAE: 44.6
RandomForestRegressor R2: 0.309 MAE: 47.8
このデータでは、単純な線形回帰のほうが決定係数(R2)も平均絶対誤差(MAE)も良い結果になりました。ただし、この1回の分割による比較だけでは、データの関係がほぼ線形であることや、線形回帰が常に優れることまでは判断できません。だからこそ、同じ手順のままモデルを差し替えて比べられる設計が効いてきます。R2 の読み方は 決定係数の意味と回帰モデルの当てはまりの読み方にまとめています。
クラスタリングと次元削減:KMeansとPCA
正解ラベルを使わない教師なし学習も、同じ fit 系のメソッドで書けます。
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from sklearn.metrics import adjusted_rand_score
X, y = load_iris(return_X_y=True)
labels = KMeans(n_clusters=3, random_state=0).fit_predict(X)
print("正解ラベルとの一致度(ARI):", round(adjusted_rand_score(y, labels), 3))
pca = PCA(n_components=2).fit(X)
print("2次元で保てた分散の割合:", pca.explained_variance_ratio_.round(3),
"合計", round(pca.explained_variance_ratio_.sum(), 3))
正解ラベルとの一致度(ARI): 0.716
2次元で保てた分散の割合: [0.925 0.053] 合計 0.978
KMeans は品種を教えなくても3つの塊に分け、正解との一致度(調整ランド指数、1が完全一致)は0.716でした。PCA は4つの特徴量を2つに縮めても、ばらつきの97.8%を保っています。寄与率や負荷量の読み方は 主成分分析(PCA)の読み方を実データで解説した記事で詳しく扱っています。
前処理と評価を正しく組む:ColumnTransformer・Pipeline・GridSearchCV
ColumnTransformerによる数値列・カテゴリ列の前処理
実データは数値列とカテゴリ列が混在しているのが普通です。列ごとに違う前処理を当てるには ColumnTransformer を使います(DataFrame を渡すので pandas も必要です)。
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, StandardScaler
df = pd.DataFrame(
{"age": [25, 40, 33], "dept": ["sales", "dev", "sales"]}
)
ct = ColumnTransformer(
[("num", StandardScaler(), ["age"]),
("cat", OneHotEncoder(sparse_output=False), ["dept"])]
)
out = ct.fit_transform(df)
print(ct.get_feature_names_out())
print(out.round(3))
['num__age' 'cat__dept_dev' 'cat__dept_sales']
[[-1.251 0. 1. ]
[ 1.197 1. 0. ]
[ 0.054 0. 1. ]]
年齢は平均0・標準偏差1に標準化され、部署は dev と sales の2列に展開されました。get_feature_names_out() の名前は既定で「変換器名__変換後の特徴量名」の形式です。One-Hotエンコーディングでは特徴量名にカテゴリ名(dept_dev など)が入るので、特徴量が数十列に増えても、変換後のどの列が何を表すかを追えます。
ロジスティック回帰の標準化による正解率と収束の比較
乳がん診断データ(30特徴量、列ごとに値の桁が大きく違う)でロジスティック回帰を、標準化ありとなしで比べます。max_iter は既定の100のままです。
import warnings
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
X, y = load_breast_cancer(return_X_y=True)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=0)
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
raw = LogisticRegression().fit(X_tr, y_tr) # max_iter は既定の100
print("スケーリングなし:", round(raw.score(X_te, y_te), 4),
"警告:", w[0].category.__name__ if w else "なし")
sc = StandardScaler().fit(X_tr)
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always")
scaled = LogisticRegression().fit(sc.transform(X_tr), y_tr)
print("スケーリングあり:", round(scaled.score(sc.transform(X_te), y_te), 4),
"警告:", w[0].category.__name__ if w else "なし")
スケーリングなし: 0.9591 警告: ConvergenceWarning
スケーリングあり: 0.9766 警告: なし
標準化なしでは ConvergenceWarning(既定の反復回数内に最適化が収束しなかった警告)が出ています。この0.9591は途中で打ち切られたモデルの成績で、アルゴリズムの実力ではありません。max_iter を増やして警告を消す前に、まず標準化を挟みます。この差はロジスティック回帰・サポートベクターマシン・k近傍法のようにスケールに敏感な手法で出やすく、ランダムフォレストなどの決定木系ではほとんど出ません。サポートベクターマシンの背景にあるカーネル法の仕組みとカーネル関数の種類は別記事で扱っています。
Pipelineと交差検証による前処理のデータリーク対策
前処理とモデルは Pipeline で1つにまとめます。目的は手間の削減ではなく、交差検証の分割ごとに前処理を学習し直させることです。
from sklearn.datasets import load_breast_cancer
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
X, y = load_breast_cancer(return_X_y=True)
pipe = make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000))
scores = cross_val_score(pipe, X, y, cv=5, scoring="accuracy")
print("各分割のスコア:", scores.round(4))
print("平均:", scores.mean().round(4))
各分割のスコア: [0.9825 0.9825 0.9737 0.9737 0.9912]
平均: 0.9807
全データを先に StandardScaler に通してから交差検証すると、検証用に取り分けた分割の平均・標準偏差が学習側へ混ざります(データリーク)。このデータでは両方とも平均0.9807で差が出ませんでしたが、リークの影響量はデータ次第で事前には分かりません。Pipeline に入れておけば、影響量を気にする必要自体がなくなります。分割手法の選び方は 交差検証の分割手法とデータリーク対策で詳しく扱っています。
GridSearchCVの既定設定での学習回数「候補×分割+1」
ハイパーパラメータの候補を辞書で並べると、交差検証つきの総当たり探索が回ります。
from sklearn.datasets import load_wine
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
X, y = load_wine(return_X_y=True)
grid = {"max_depth": [3, 5, None], "min_samples_leaf": [1, 3, 5]}
search = GridSearchCV(
RandomForestClassifier(random_state=0), grid, cv=5, scoring="accuracy", n_jobs=-1
)
search.fit(X, y)
print("最良パラメータ:", search.best_params_)
print("最良スコア:", round(search.best_score_, 4))
最良パラメータ: {'max_depth': None, 'min_samples_leaf': 1}
最良スコア: 0.9833
3×3の9候補を5分割で評価するので学習は45回ですが、RandomForestClassifier.fit の呼び出しを数えると46回でした。既定の refit=True により、最良パラメータで全データを使った再学習が最後に1回走るためで、この1回のおかげで search.best_estimator_ をそのまま予測に使えます。候補が数十通りを超えるなら RandomizedSearchCV や HalvingGridSearchCV に切り替えます。探索の打ち切り方は ハイパーパラメータ探索の手法の選び方と打ち切り設計を参照してください。
付属データセット:インストールだけで読み込める練習用データ
sklearn.datasets の load_* 関数は、ダウンロードなしで小さなデータを読み込めます。1.9.1 で形状を確認すると次のとおりです。
| 関数 | 行×列 | 課題 |
|---|---|---|
| load_iris | 150×4 | アヤメ3品種の分類 |
| load_wine | 178×13 | ワイン3品種の分類 |
| load_breast_cancer | 569×30 | 乳がん診断(良性・悪性) |
| load_digits | 1797×64 | 8×8画素の手書き数字の分類 |
| load_diabetes | 442×10 | 病状の進行度の回帰 |
| load_linnerud | 20×3 | 目的変数3つの多出力回帰 |
return_X_y=True を付けると特徴量と正解を直接受け取れます。return_X_y を省略するか False にすると、列名や説明文(DESCR)の入ったオブジェクトが返ります。掲載したデータは20〜1,797行と小規模なので、アルゴリズムの動作確認には向いていても、大規模データの処理速度を評価する用途には適しません。より大きなデータは fetch_* 系の関数が初回にネットワークから取得します。
学習済みモデルの保存:joblibと「同じ版で読む」縛り
学習したモデルを別のプロセスで予測に使う場合は、モデルを保存して読み込む工程が必要です。いちばん手軽なのは joblib です。
import joblib
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
X, y = load_iris(return_X_y=True)
model = LogisticRegression(max_iter=1000).fit(X, y)
joblib.dump(model, "iris_model.joblib") # 保存
loaded = joblib.load("iris_model.joblib") # 読み込み
print(loaded.predict(X[:3]))
[0 0 0]
落とし穴は版の違いです。公式のモデル保存ガイドは、pickle・joblib・cloudpickle のどれも別の版の scikit-learn で学習したモデルの読み込みを保証しないとしています。1.8.0 で保存したファイルを 1.9.1 で読み込むと、次の警告が出ました。
InconsistentVersionWarning: Trying to unpickle estimator LogisticRegression
from version 1.8.0 when using version 1.9.1. This might lead to breaking code
or invalid results. Use at your own risk.
エラーではないので処理は進みますが、予測が正しい保証はありません。本番で使うなら、学習環境の requirements.txt やコンテナで版を固定し、モデルファイルと一緒に管理します。ライブラリを上げるときは再学習するのが基本です。
もう1つの注意は安全性です。同ガイドは pickle 系の形式について「読み込み時に任意のコードが実行されうる」とし、信頼できない出所の pickle ファイルを読み込まないよう求めています。外部から受け取ったモデルを扱うなら、許可した型だけを読み込む skops.io(skops.io.get_untrusted_types で中身を確認してから load)か、Python 環境なしで推論できる ONNX を検討します。ONNX への変換と推論の手順は ONNXの変換とONNX Runtimeでの推論で扱っています。
Scikit-learnを選ぶべきでない場面
深層学習・強化学習は公式が対象外と明言
公式FAQは、深層学習と強化学習はアーキテクチャを定義するための豊富な語彙が必要で「neither of these fit within the design constraints of scikit-learn」として、どちらもスコープ外と明言しています。sklearn.neural_network にあるのは BernoulliRBM・MLPClassifier・MLPRegressor の3つだけで、FAQ はこのモジュールについて「バグ修正のみ受け付ける」と付記しています。画像・音声・テキストから深層学習で特徴表現を学習するなら PyTorchのできることとTensorFlowとの違いを先に検討してください。
GPUは既定で非対応
FAQ は、GPU 対応を標準にするとハードウェア依存の重い依存関係が入り、インストールも保守も難しくなると説明しています。PyTorch 配列や CuPy 配列を渡して一部の推定器を GPU で動かす Array API 対応はありますが、位置づけは experimental(実験的)で、対応する推定器も限られます。数百万行規模の学習を GPU 前提で組むなら、Scikit-learn は選定から外します。
勾配ブースティングの必要機能と処理時間によるライブラリ選定
表形式データでも、LightGBMやXGBoostへの切り替えは、必要な機能と、同じデータ・評価条件で測った学習時間・予測精度を基に判断します。Scikit-learn の HistGradientBoostingClassifier も大規模データ向けの候補に含め、同じ条件で比較します。Scikit-learn と LightGBM は対立せず、LightGBM の LGBMClassifier は scikit-learn と同じ fit/predict の形を持つので、前処理・交差検証・グリッドサーチは Scikit-learn のまま、モデル部分だけを差し替えられます(LightGBMの仕組みとPython実装)。
Scikit-learn 1.9.0(2026年6月)と1.9.1(2026年9月)の変更点
1.9.0 で実務に効く変更は次の4点です。出典は公式のリリースノート(What's new for version 1.9)です。
- コールバックAPIの追加(実験的):
sklearn.callbackにProgressBar(進捗表示)とScoringMonitor(反復ごとのスコア記録)が入りました。対応はLogisticRegression(solver="lbfgs"のときのみ)・GridSearchCV・HalvingGridSearchCV・HalvingRandomSearchCV・RandomizedSearchCV・Pipeline・StandardScalerの7つ。公式は「This API is experimental for now and may change without the usual deprecation cycle.」と明記しています - 疎行列の返し方の切り替え:
sklearn.set_config(sparse_interface="sparray")で SciPy の sparse array を返すようになります。既定は従来の sparse matrix のままで、数リリース後に既定を変える予定です - 閾値ごとの指標算出:
metrics.metric_at_thresholdsで、取りうるすべての閾値での指標値をまとめて計算できます - narwhals への依存追加:pandas や polars の DataFrame の入出力を共通化するための軽量ライブラリです
1.9.1 はバグ修正版ですが、結果が変わる修正も入っています。LinearDiscriminantAnalysis と QuadraticDiscriminantAnalysis の solver="svd" は正規化が 1/n_samples に変わり、solver="eigen" と同じ結果を返すようになりました。パイプラインの途中にある SelectFromModel や RFE などへ sample_weight が黙って渡っていなかった不具合も直っています。1.9.0 からの更新で数値がずれたら、まずこの2点を疑います。
機械学習モデルを業務システムへ組み込む段階で、データ設計や運用まで含めて相談したい場合は、機械学習モデル開発の支援も行っています。
よくある質問
Scikit-learnの読み方は?
公式FAQが「sy-kit learn」と示しています。カタカナ表記の定めはなく、「サイキットラーン」「サイキット・ラーン」のどちらも使われています。
sklearnとscikit-learnは同じものですか?
同じライブラリで、名前を使う場所が違います。Python コード内の import 名が sklearn、pip に渡すパッケージ名が scikit-learn です。pip install sklearn はエラーで止まるので、requirements.txt も scikit-learn に揃えてください。
Scikit-learnのバージョンを確認するには?
python -c "import sklearn; print(sklearn.__version__)" で版だけ、sklearn.show_versions() で依存ライブラリまで表示されます。想定より古い版なら Python の版が要件を満たしていない可能性が高く、1.8 以降は Python 3.11 以上が必要です。
Scikit-learnとTensorFlowの違いは何ですか?
Scikit-learn は表形式データを標準的なアルゴリズムで解くライブラリで、TensorFlow や PyTorch はニューラルネットワークを自分で組んで GPU で学習させるためのフレームワークです。画像・音声・自然言語を対象に深層学習モデルの構造を設計し、GPUで学習させるなら後者を選びます。文書をTF-IDFに変換して分類する用途などは、Scikit-learnでも実装できます。
Scikit-learnでディープラーニングはできますか?
向きません。公式FAQが深層学習をスコープ外としています。sklearn.neural_network に多層パーセプトロンはありますが、畳み込み層や再帰層の設計はできず、このモジュールはバグ修正のみの扱いです。