投稿

【機械学習入門 第4回】モデルの性能評価!正解率・混同行列でAIの「実力」を正しく測ろう

イメージ
「モデルの正解率が95%って出たけど、これって本当に『良いモデル』ってこと?」 「モデルがどんな間違い方をしているのか、詳しく知る方法はないの?」 「『混同行列』って言葉を聞いたけど、何が分かるの?」 こんにちは! AI・機械学習探検隊、隊長のPythonistaです! 前回の第3回 では、アヤメの品種を予測する「分類」モデルを、ロジスティック回帰とk近傍法という2つのアルゴリズムで構築しましたね。そして、モデルの性能を測る簡単な指標として「正解率」を見ました。 しかし、機械学習の世界では、単に正解率が高いだけでは「良いモデル」とは言えない場面がたくさんあります。今回の第4回では、モデルの性能をより深く、そして多角的に評価するための 「モデル評価」 の技術を徹底解説します。具体的には、 なぜ正解率だけでは不十分なのか? モデルの間違い方を詳細に分析する 「混同行列 (Confusion Matrix)」 混同行列から導かれる重要な指標 「適合率 (Precision)」 と 「再現率 (Recall)」 といった、よりプロフェッショナルな評価方法を学んでいきます。モデルの真の実力を見抜くための「診断スキル」を身につけ、信頼できるAI開発者への一歩を踏み出しましょう! 1. 準備:ライブラリのインポートと前回のモデルの再構築 今回も、Scikit-learnやPandas、Matplotlibを使います。評価のために、前回作成したアヤメの分類モデルを再度準備しましょう。 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # Scikit-learnから必要なモジュールをインポート from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_sco...

【機械学習入門 第3回】これはAかBか?Scikit-learnで分類(Classification)モデルに挑戦しよう(アヤメ品種分類編)

イメージ
「数値の予測はできたけど、次はカテゴリを予測したい!」 「このメールは『迷惑メール』か『通常メール』か、どうやって判断させるの?」 「ロジスティック回帰って名前なのに分類? k近傍法って何?」 こんにちは! AI・機械学習探検隊、隊長のPythonistaです! 前回の第2回 では、「回帰」モデルを使って住宅価格という連続する数値を予測することに成功しましたね。データから未来の数値を導き出す、機械学習のパワーを実感できたのではないでしょうか。 シリーズ第3回の今回は、機械学習のもう一つの大きな柱、 「分類 (Classification)」 に挑戦します! 分類とは、データがどのカテゴリ(クラス)に属するかを予測するタスクです。「迷惑メールか否か」「画像に写っているのは犬か猫か」「この顧客は購入するかしないか」など、世の中の多くの問題は分類問題として捉えることができます。 今回は、機械学習の世界で「Hello, World!」として非常に有名な**アヤメ(Iris)のデータセット**を題材に、 名前に反して分類が得意な 「ロジスティック回帰」 「ご近所さん」に倣う直感的なアルゴリズム 「k近傍法 (k-NN)」 という2つの代表的な分類モデルを構築していきます。さあ、データを見てカテゴリを当てる、賢いモデル作りを始めましょう! 1. 準備:ライブラリのインポート 今回も、データ分析と可視化でおなじみのライブラリたちをインポートしておきます。 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # Scikit-learnから必要なモジュールをインポート from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression # ロジスティック回帰 from sklearn.neighbors import KNeighborsClass...

【機械学習入門 第2回】最初の予測モデル!Scikit-learnで線形回帰(Linear Regression)に挑戦しよう(住宅価格予測編)

イメージ
「Scikit-learnの fit と predict の使い方は分かったけど、実際のデータではどう使うの?」 「機械学習で『数値を予測する』って、具体的にどんな手順でやるんだろう?」 「データサイエンスの第一歩として、何か実践的なモデルを作ってみたい!」 こんにちは! AI・機械学習探検隊、隊長のPythonistaです! 前回の第1回 では、機械学習の基本的な概念と、Scikit-learnの驚くほどシンプルで一貫したAPI( fit / predict )の流れを学びましたね。これで、機械学習モデルを訓練し、予測を行うための「設計図」を手に入れました。 シリーズ第2回の今回は、いよいよその設計図を元に、 最初の本格的な予測モデル を構築していきます! 今回挑戦するのは、教師あり学習の一分野である 「回帰 (Regression)」 です。回帰とは、過去のデータから学習し、新しいデータに対して連続する**数値**(例: 価格、気温、売上など)を予測するタスクです。題材として、現実のデータに近い「カリフォルニアの住宅価格データセット」を使い、最も基本的で強力な回帰モデルである 「線形回帰 (Linear Regression)」 で、住宅価格の予測に挑戦します。Pythonで家の値段を予測する、そんな未来的な体験を一緒に楽しみましょう! 1. 準備:ライブラリのインポート まずは、今回使用するライブラリをインポートします。データ探索のためにPandas、可視化のためにMatplotlibも使います。 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # より美しいグラフのためにSeabornもインポート # Scikit-learnから必要なモジュールをインポート from sklearn.datasets import fetch_california_housing from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression ...

【機械学習入門 第1回】AIプログラミングへの扉!Scikit-learnではじめる機械学習の第一歩 🤖

「データ分析の次に、よく聞く『機械学習』って何だろう?」 「PythonでAIや未来予測みたいなことって、本当にできるの?」 「Scikit-learn(サイキットラーン)って名前は聞くけど、何から始めればいいかわからない…」 こんにちは! Python探検隊、隊長のPythonistaです! これまで私たちは、NumPyで数値を操り、Pandasでデータを自在に整形・分析し、Matplotlibでその結果を可視化する、というデータサイエンスの強力な武器を手に入れてきましたね。 今回から始まる新シリーズでは、いよいよその集大成として、データサイエンスの頂とも言える 「機械学習 (Machine Learning)」 の世界に足を踏み入れます! 機械学習とは、データの中からパターンをコンピュータ自身に「学習」させ、未知のデータに対して予測や判断を行わせる技術です。そして、その冒険の最高のパートナーとなるのが、Pythonで最も有名で使いやすい機械学習ライブラリ、 Scikit-learn (サイキットラーン) です。 第1回となる今回は、まず「機械学習とは何か?」という基本的な概念を理解し、Scikit-learnのインストールと、その驚くほど一貫性のあるシンプルな使い方(API)を体験します。この記事を読み終える頃には、あなたはAI・機械学習の世界への確かな第一歩を踏み出しているはずです! 1. 機械学習とは? - コンピュータがデータから「学ぶ」ということ 機械学習 (Machine Learning, ML) とは、人間が全てのルールを明示的にプログラムするのではなく、データを与えて、そのデータに潜むパターンや法則をコンピュータ自身に学習させ、その学習結果を元に未知のデータに対する予測や分類を行わせる技術のことです。 例えば、「迷惑メールフィルター」を考えてみましょう。人間が「『儲かる』という単語が入っていたら迷惑メール」「『当選おめでとう』なら迷惑メール」…と無限にルールを書くのは不可能です。そこで、大量の「迷惑メール」と「普通のメール」のサンプルをコンピュータに見せて、「これが迷惑メールの特徴だよ」と学習させます。すると、コンピュータは自らパターンを見つけ出し、新しいメールが来た時にそれが迷惑メールかどうかを高い精度で判断できるよ...

【まとめ】豆知識

【Python】a, b = b, a って何?話題の変数スワップ、その仕組みを徹底解説!🤔✨   【Python】forループを1行で書く魔法?「リスト内包表記」を徹底解説!(if文付きも)✨

【Python】forループを1行で書く魔法?「リスト内包表記」を徹底解説!(if文付きも)✨

「リスト作成、まだforループで消耗してる?」 TikTokの動画 を見て、この記事にたどり着いた皆さん、ありがとうございます! 動画で紹介した、数行にわたる for ループと append の処理を、たった1行の美しいコードで実現するPythonのテクニック。それが 「リスト内包表記(list comprehension)」 です。 「どうしてあんな書き方ができるの?」「読み方が分からない…」そして動画の最後にあった「じゃあ、if文付きはどう書くの?」という疑問。この記事では、そんなあなたの「?」を「!」に変えるため、リスト内包表記の基本的な仕組みから、 if 文を使った応用的な使い方まで、分かりやすく徹底的に解説していきます。このテクニックをマスターすれば、あなたのPythonコードはもっと簡潔に、もっとエレガントになりますよ! 1. 復習:基本的なリストの作り方( forループ とappend) まず、動画の「Before」で見た、伝統的で分かりやすいリストの作成方法をおさらいしましょう。例えば、「1から5までの数値をそれぞれ2乗したリスト」を作る場合、以下のように書きますね。 # よくある書き方 squares = [] # 1. 空のリストを用意する for i in range( 1 , 6 ): # 2. 1から5までループする squares.append(i** 2 ) # 3. 2乗した結果をリストに追加する print(squares) 実行結果: [1, 4, 9, 16, 25] この方法は、処理の流れが追いやすく、プログラミング初心者にとって非常に理解しやすい、正統な書き方です。しかし、Pythonはこのような定型的な処理を、もっとスマートに書くための素晴らしい機能を提供してくれています。 2. リスト内包表記:Pythonicな解決策 それでは、動画の「After」で登場した魔法の1行、リスト内包表記の構造を解き明かしていきましょう。 2.1. 基本の構文: [ 式 for 要素 in イテラブル ] 先ほどのコードは、リスト内包表記を使うと以下のように書けます。 # Pythonなら、これが1行。 squares = [i** 2 for i in range( ...

【Python】a, b = b, a って何?話題の変数スワップ、その仕組みを徹底解説!🤔✨

イメージ
「Python変数の入れ替え、まだこうしてない?」 TikTokの動画 を見て、この記事にたどり着いた皆さん、ありがとうございます! 動画で紹介した、たった1行で2つの変数の値を入れ替えてしまう、まるで魔法のようなコード。 a, b = b, a 。 「なんでこれで値が入れ替わるの?」と不思議に思ったのではないでしょうか。 この記事では、その「魔法」のタネ明かしをします。結論から言うと、これはPythonが持つ 「タプル」 と 「アンパック」 という2つの強力な機能を組み合わせた、非常にエレガントでPythonらしいテクニックなのです。 さあ、一時変数( temp )を使っていたあの頃にはもう戻れない、スマートな変数スワップの世界を探検しましょう! 1. 復習:よくある変数の入れ替え方(コップの例え) まず、動画の「Before」で紹介した、多くのプログラミング言語で共通する基本的な変数の入れ替え方法をおさらいしましょう。 # よくある書き方 a = 100 b = 200 print(f "入れ替え前: a = {a}, b = {b}" ) # 一時的な変数tempを用意する temp = a a = b b = temp print(f "入れ替え後: a = {a}, b = {b}" ) 実行結果: 入れ替え前: a = 100, b = 200 入れ替え後: a = 200, b = 100 これは、よく「2つのコップの中身を入れ替える」話に例えられます。 水が入ったコップAと、ジュースが入ったコップBがあります。 そのままでは中身を入れ替えられないので、空のコップ( temp )を用意します。 コップAの水を、空のコップ temp に注ぎます。( temp = a ) 空になったコップAに、コップBのジュースを注ぎます。( a = b ) 最後に、 temp に取っておいた水を、空になったコップBに注ぎます。( b = temp ) このように、一時的な「待避場所」として3つ目の変数を使うのが、伝統的で分かりやすい方法です。しかし、Pythonはこの手順をもっとスマートに解決してくれます。 2. Pythonの魔...