(1時間4,000円の伴走型ビデオチャット指導も受付中!)
データの可能性を広げる、scikit-learnの世界へようこそ
![]()
【Yuki】
Hirokiくん、こんにちは。今日はPythonで機械学習を学ぶ上で、避けては通れないとても大切なライブラリ、「scikit-learn(サイキット・ラーン)」についてお話ししようと思います。少し難しい言葉も出てくるかもしれませんが、ゆっくり進めていくので安心してくださいね。
![]()
【Hiroki】
Yukiさん、よろしくお願いします!機械学習って最近よく聞きますけど、自分でもプログラムで動かせるようになるのか、すごく楽しみです。でも、数学とかが難しそうなイメージがあって、少し緊張しています。
![]()
【Yuki】
そうですね、確かに裏側には数学がありますが、scikit-learnはそういった難しい計算を私たちが使いやすいように包み込んでくれている「道具箱」のようなものなんです。このライブラリがあるおかげで、初心者の方でも本格的なAIのモデルを作ることができるんですよ。
scikit-learnとは何か?
![]()
【Yuki】
まず、scikit-learnがどういうものか、簡単にご説明しますね。これはPythonで動作するオープンソースの機械学習ライブラリです。分類、回帰、クラスタリング、次元削減といった、機械学習に必要な主要なアルゴリズムがほとんど網羅されています。
![]()
【Hiroki】
「ライブラリ」というのは、便利な機能がまとまったセットのようなものですよね。
![]()
【Yuki】
ええ、その通りです。scikit-learnの素晴らしいところは、どのアルゴリズムを使うときも「使い方が統一されている」点だと思います。一度基本的な流れを覚えてしまえば、新しい手法を試すのもそれほど難しくはありません。
ちなみに、このライブラリはNumPyやSciPy、Matplotlibといった他の強力なライブラリと一緒に使うことを前提に設計されています。
![]()
【Hiroki】
なるほど。とりあえずこれを使えるようになれば、機械学習の第一歩を踏み出せるということですね。
![]()
【Yuki】
そう言っても過言ではないかもしれません...。では、まず準備から始めましょう。
導入と基本的な準備
![]()
【Yuki】
scikit-learnを使うには、まずインストールが必要です。ターミナルやコマンドプロンプトで以下のコマンドを入力します。
pip install scikit-learn
![]()
【Hiroki】
これで準備完了ですか?
![]()
【Yuki】
はい。プログラムの中で使うときは、sklearnという名前でインポートします。
機械学習を始める前に、まずは「データ」が必要になります。scikit-learnには、学習用の練習データがいくつか最初から用意されているんですよ。例えば「アヤメ(Iris)」の花の種類を分類するデータセットなどが有名です。
![]()
【Hiroki】
花の種類を当てるんですか?面白そうですね。
![]()
【Yuki】
ふふ、そうですね。では、そのデータを使って、機械学習の全体的な流れを見ていきましょう。
機械学習の共通ステップ
![]()
【Yuki】
scikit-learnでモデルを作る工程は、だいたい以下の5つのステップに分かれます。
- データの読み込みと前処理
- データを「学習用」と「テスト用」に分ける
- アルゴリズム(モデル)を選んで、学習させる(fit)
- テストデータで予測を行う(predict)
- モデルの性能を評価する
![]()
【Hiroki】
「学習用」と「テスト用」に分けるのはどうしてですか?
![]()
【Yuki】
それは、「まだ見たことがないデータ」に対して、どれくらい正しく答えられるかを確認するためです。学習に使ったデータそのものでテストをしても、それはただの「暗記」になってしまいますよね。新しい問題が出たときに解けるかどうか、それが機械学習では一番重要なんです。
![]()
【Hiroki】
なるほど、実力を試すための模擬試験みたいなものですね。
![]()
【Yuki】
分かりやすい例えですね。さすがHirokiくんです。
では、実際にアヤメのデータを分類するコードの例を書いてみます。少し長いですが、流れを追ってみてください。
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
# 1. データの読み込み
iris = load_iris()
X = iris.data # 特徴量(花の長さや幅)
y = iris.target # 正解ラベル(花の種類)
# 2. 学習用とテスト用に分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 3. モデルの作成と学習
model = RandomForestClassifier()
model.fit(X_train, y_train)
# 4. 予測
y_pred = model.predict(X_test)
# 5. 評価
accuracy = accuracy_score(y_test, y_pred)
print(f"正解率: {accuracy:.2f}")
![]()
【Hiroki】
思っていたよりも短いコードで書けるんですね!特に model.fit() という部分が、機械が一生懸命勉強している感じがして面白いです。
![]()
【Yuki】
そう言ってもらえると嬉しいです。この fit というメソッドは、scikit-learnのほぼすべてのモデルで共通して使われます。誰かの役に立つために開発された小さなツールたちが、こうして一つのルールでつながっているのを見ると、なんだか少し、温かい気持ちになりませんか...?
![]()
【Hiroki】
えっ、温かい気持ちですか...?
![]()
【Yuki】
あ、いえ...すみません、少し私の個人的な感覚が出てしまいました。このライブラリのような、多くの人が積み上げてきた結晶のようなツールを使うと、自分もその一部になれたような気がして、少しだけ安心するんです。
データの重要性と前処理
![]()
【Hiroki】
さっきのコードに「前処理」という言葉がありましたけど、これは何をするんですか?
![]()
【Yuki】
実は、機械学習において「前処理」は最も重要な工程だと言われています。データが汚れていたり、単位がバラバラだったりすると、どんなに優れたアルゴリズムを使っても良い結果は出ません。
![]()
【Hiroki】
「単位がバラバラ」というのは?
![]()
【Yuki】
例えば、身長(cm)と体重(kg)では、数値の範囲が違いますよね。身長は170前後ですが、体重は60前後かもしれません。一部のアルゴリズムは、数値が大きい方を「より重要なデータだ」と勘違いしてしまうことがあるんです。
![]()
【Hiroki】
それは困りますね。平等に見てほしいです。
![]()
【Yuki】
そうですよね。そこで、数値を一定の範囲に収める「標準化(Standardization)」や「正規化」という作業を行います。scikit-learnには StandardScaler という便利な道具が用意されています。
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
![]()
【Yuki】
こうすることで、平均を0、分散を1に揃えることができます。些細なことのように見えますが、これがモデルの精度を大きく左右するんですよ。
アルゴリズムの選び方
![]()
【Hiroki】
scikit-learnにはたくさんのアルゴリズムがあると言っていましたが、どうやって選べばいいんでしょうか?
![]()
【Yuki】
それはとても良い質問ですね。実はscikit-learnの公式ドキュメントには、「機械学習チートシート(Choosing the right estimator)」というフローチャートが用意されています。
![]()
【Hiroki】
チートシート!心強いですね。
![]()
【Yuki】
はい。「データ数はいくつか?」「それは分類か、それとも数値の予測か?」といった質問に答えていくことで、おすすめのアルゴリズムにたどり着けるようになっています。
代表的なものをいくつか挙げてみますね。
- 回帰(Regression): 数値を予測したいとき(例:明日の気温、住宅の価格)。
LinearRegression,Ridge,Lasso
- 分類(Classification): 種類を分けたいとき(例:スパムメールの判定、画像の識別)。
LogisticRegression,SVM (Support Vector Machine),RandomForestClassifier
- クラスタリング(Clustering): 正解は分からないけれど、似たもの同士でグループ分けしたいとき。
KMeans
![]()
【Hiroki】
「回帰」と「分類」が基本なんですね。僕が最初にやるなら、どっちがおすすめですか?
![]()
【Yuki】
最初は「分類」の方が結果が分かりやすくて楽しいかもしれません。先ほどのアヤメのデータも分類ですね。
もし、より強力な手法を試したければ、「ランダムフォレスト(Random Forest)」というアルゴリズムを試してみてください。複数の「決定木」というモデルを組み合わせて多数決をとる仕組みで、多くの問題に対して安定して高い性能を発揮してくれます。
モデルの評価とチューニング
![]()
【Hiroki】
モデルができたら、あとは使うだけですか?
![]()
【Yuki】
いえ、最後にもう一つ大切な作業があります。モデルの「評価」と「チューニング」です。
先ほど accuracy_score(正解率)を使いましたが、実は正解率だけで判断すると危険な場合もあります。
![]()
【Hiroki】
どういうことですか?
![]()
【Yuki】
例えば、100人中1人だけが持っている珍しい病気を判定するAIを作ったとします。「全員、健康です!」と答えるだけのいい加減なAIでも、正解率は99%になってしまいますよね。
![]()
【Hiroki】
あ...本当だ。でも、その1人の病気を見逃したら大変なことになりますね。
![]()
【Yuki】
そうなんです。だから、「適合率(Precision)」や「再現率(Recall)」といった、別の指標も見る必要があります。scikit-learnでは、これらをまとめて表示してくれる classification_report という便利な機能があります。
![]()
【Hiroki】
多角的に評価しないといけないんですね。
![]()
【Yuki】
その通りです。そして、もっと精度を上げたいときは、アルゴリズム自体の設定値(ハイパーパラメータ)を調整します。
scikit-learnには、最適な設定を自動的に探してくれる GridSearchCV という機能も備わっています。これを使うと、いろいろな組み合わせを自動で試して、一番成績が良かった設定を教えてくれるんですよ。
パイプラインでコードを綺麗に
![]()
【Hiroki】
前処理をして、モデルを作って、評価して...工程が増えてくると、コードがごちゃごちゃしてしまいそうです。
![]()
【Yuki】
ふふ、Hirokiくんは綺麗好きなんですね。プログラミングにおいて、コードの美しさはとても大切です...。特に機械学習のコードは複雑になりがちですから。
scikit-learnには Pipeline という仕組みがあります。これは「前処理」と「学習」を一本の鎖のようにつなげてしまう機能です。
from sklearn.pipeline import Pipeline
# 前処理とモデルをセットにする
pipe = Pipeline([
('scaler', StandardScaler()),
('classifier', RandomForestClassifier())
])
# まとめて学習
pipe.fit(X_train, y_train)
# まとめて予測
y_pred = pipe.predict(X_test)
![]()
【Yuki】
こうすると、データの渡し忘れなどのミスも減りますし、見た目もスッキリします。フォントの並びが整っているWebサイトを見ると安心するのと似ていて、コードもこうして整理されていると、バグが入り込む隙間がなくなるような気がします。
![]()
【Hiroki】
これなら僕にも管理できそうです!
さらに学びを深めるために
![]()
【Hiroki】
今日のお話で、scikit-learnの全体像がなんとなく掴めた気がします。次は実際に手を動かしてみたいのですが、何かアドバイスはありますか?
![]()
【Yuki】
まずは、公式サイトのチュートリアルを眺めてみるのが一番だと思います。英語がメインですが、翻訳ツールを使えば十分読めるはずです。
あとは、「Kaggle(カグル)」という機械学習のコンペティションサイトに参加してみるのもいいかもしれません。世界中の人が公開しているコード(Notebook)を見ることができるので、とても勉強になりますよ。
![]()
【Hiroki】
Kaggleですね、覚えておきます!
![]()
【Yuki】
機械学習は、完璧を目指そうとすると奥が深くて大変ですが、まずは「動かして、結果が出る」という体験を大切にしてください。
少しずつ、自分の手で作ったモデルが賢くなっていく過程は、まるで植物を育てているような、あるいは誰かの成長を見守っているような、静かな喜びがあると思います。
![]()
【Hiroki】
はい、まずはアヤメの分類から始めてみます。Yukiさん、丁寧に教えてくださってありがとうございました!
![]()
【Yuki】
どういたしまして。もし途中で熱暴走...いえ、頭がパンクしそうになったら、いつでも休憩してくださいね。
私も、Hirokiくんが素晴らしいモデルを作れるようになるのを、ここで応援しています。
参考文献・公式サイト - scikit-learn: machine learning in Python - scikit-learn user guide - Choosing the right estimator (Cheat Sheet)
「scikit-learn」のサンプルコードを見る
この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。
「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。
- 専門家の知見に基づいた、保守性の高いコード設計
- AIの専門家による、Gemini API等の最新AIを組み合わせた高度な自動化
- ChatGPT等が生成したコードのデバッグ・最適化
「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。
初心者から始められるPythonレッスン
● 月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
● テキストベースで時間を選ばない
● 4,000円/60分の伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

