忍者ブログ
統計、機械学習、AIを学んでいきたいと思います。 お役に立てば幸いです。

【Python】SymPyで極限(limit)を求める!1/x の 0 への接近

関数の値がどこまで近づくかを計算する「極限(limit)」。PythonのSymPyライブラリを使うと、単純な数値代入ではエラー(ゼロ除算)になってしまう $f(x) = 1/x$ のようなケースも、数学的な極限として正しく処理できます。

1. limit関数のポイント:近づく「方向」

関数 $f(x) = 1/x$ は、0に近づくときに「右側(正の数)」から近づくか、「左側(負の数)」から近づくかで結果が異なります。SymPyでは引数 dir を使ってこの方向を指定します。

  • dir='+':右側極限(0.1, 0.01...と正の側から接近)
  • dir='-':左側極限(-0.1, -0.01...と負の側から接近)

2. Pythonサンプルプログラム

特別な設定をせず、標準的な print 関数を使って結果を出力します。

# -*- coding: utf-8 -*-
from sympy import symbols, limit

def main():
    # 変数xを定義
    x = symbols('x')
    
    # 関数 f(x) = 1/x の定義
    f = 1 / x

    # 右側極限 (x -> 0+)
    limit_right = limit(f, x, 0, dir='+')

    # 左側極限 (x -> 0-)
    limit_left = limit(f, x, 0, dir='-')

    print("--- f(x) = 1/x の極限計算 ---")
    print(f"x -> 0+ (右側極限): {limit_right}")
    print(f"x -> 0- (左側極限): {limit_left}")

if __name__ == "__main__":
    main()

3. 実行結果

実行すると、以下のような結果が得られます。SymPyでは無限大($\infty$)を oo(小文字のoが2つ)で表現します。

--- f(x) = 1/x の極限計算 ---
x -> 0+ (右側極限): oo
x -> 0- (左側極限): -oo

4. まとめ

結果にある oo は正の無限大、-oo は負の無限大を意味しています。右から近づけばプラス無限に、左から近づけばマイナス無限に発散するという数学的な挙動が、たった数行のコードで確認できました。ゼロ除算エラーを気にせず数学的検証ができるSymPyは、エンジニアにとっても強力な武器になりますね。



PR

【Python】SymPyで偏微分をマスター!多変数関数の計算結果をコード形式で出力する

Pythonの強力な数式処理ライブラリ「SymPy」を使って、多変数関数 $f(x, y) = x^2 + 3 + y^4 + 5$ の偏微分を計算する方法を解説します。今回は、計算結果をそのままプログラムに再利用しやすい「標準出力形式」で表示します。

1. 偏微分のルール

偏微分とは、特定の変数だけに注目して微分し、それ以外の変数はすべて「定数(ただの数字)」として扱う計算です。

  • xで偏微分:x^2を微分して 2*x となり、それ以外の $y^4$ や定数は消えます。
  • yで偏微分:y^4 を微分して 4*y**3 となり、それ以外の $x^2$ や定数は消えます。

2. Pythonサンプルプログラム

余計な装飾設定を省き、標準の print() 関数で結果を出力するシンプルな構成です。

# -*- coding: utf-8 -*-
from sympy import symbols, diff

def main():
    # 1. 変数x, yを記号として定義
    x, y = symbols('x y')

    # 2. 関数の定義 f(x, y) = x^2 + 3 + y^4 + 5
    f = x**2 + 3 + y**4 + 5

    # 3. xおよびyで偏微分を実行
    df_dx = diff(f, x)
    df_dy = diff(f, y)

    # 4. 結果を表示
    print("--- xでの偏微分結果 ---")
    print(df_dx)
    
    print("\n--- yでの偏微分結果 ---")
    print(df_dy)

if __name__ == "__main__":
    main()

3. 実際の実行結果

このコードを実行すると、コンソールには以下のように出力されます。*(掛け算)や **(累乗)がそのまま表示されるため、エンジニアにとって非常に直感的です。

--- xでの偏微分結果 ---
2*x

--- yでの偏微分結果 ---
4*y**3

4. まとめ

SymPyのデフォルト出力は、Pythonのコードとしてそのまま通用する形式です。複雑な数式も、この形式で出力すればロジックの確認や他のスクリプトへの移植がスムーズに行えます。見た目の美しさよりも「実用性」を重視する場面では、この標準出力が最も頼りになります。


【DS検定対策】「中身」で勝負!コンテンツベースフィルタリングの仕組み

「この映画のアクションシーンが好きなら、こっちのアクション映画もどう?」アイテムの特徴そのものに注目するのが、コンテンツベースフィルタリングです。

1. 【 問題 】

レコメンドシステムにおいて、アイテムのジャンル、テキスト説明、メタデータなどの属性情報を分析し、ユーザーが過去に好んだアイテムと特徴が類似したアイテムを推薦する手法を何と呼ぶでしょうか?

① 協調フィルタリング
② 内容ベース(コンテンツベース)フィルタリング
③ 相関分析
④ クラスター分析


2. 【 解答 】

正解: ② 内容ベース(コンテンツベース)フィルタリング

3. 整理:アイテムの「プロフィール」を比較する

この手法では、まず各アイテムを「特徴ベクトル」として表現します。

【 コンテンツベースの流れ 】

[ 1. アイテムの属性抽出 ]
映画A:[ジャンル:SF, 監督:〇〇, 主演:△△]
映画B:[ジャンル:SF, 監督:××, 主演:△△]

[ 2. ユーザープロファイルの作成 ]
ユーザーが過去に見た映画から、「この人は『SF』と『主演:△△』を好む」という傾向を数値化する。

[ 3. 類似度の計算 ]
ユーザーの好みと、未視聴のアイテムの「属性」がどれだけ近いかを計算し、高い順に勧める。

--------------------------

メリット: 他のユーザーのデータが不要なため、新商品(誰も買っていないもの)でも特徴さえ分かればレコメンド可能です!

4. 協調フィルタリングとの比較(ここが試験に出る!)

手法注目するデータ新商品への対応
協調 他人の購入履歴 苦手(データがないため)
コンテンツ アイテムの属性 得意(属性で判断できる)

5. DS検定形式:実戦4択クイズ

問:コンテンツベースフィルタリングの弱点として、ユーザーの過去の好みに似たものばかりが選ばれ、意外性のある提案ができなくなる現象を何と呼ぶか。

① コールドスタート問題   ② オーバーフィッティング   ③ フィルターバブル   ④ 勾配消失

【 正解: ③ 】

解説: 自分の好きなジャンルばかりに囲まれてしまい、新しいジャンルに出会えなくなることを「フィルターバブル(またはセレンディピティの欠如)」と呼びます。


6. まとめ

DS検定において「アイテムの属性」「特徴の類似」というキーワードが出たら「コンテンツベース」です。協調フィルタリングが「他人の行動」を見るのに対し、こちらは「アイテムの中身」を見る、という違いを明確にしておきましょう!


【DS検定対策】好みを予測する!「協調フィルタリング」の仕組み

「自分と好みが似ているあの人が買ったなら、私も好きかも」。そんな直感を計算式に落とし込んだのが協調フィルタリングです。

1. 【 問題 】

レコメンドシステムにおいて、多くのユーザーの行動履歴(購入、閲覧、評価など)を蓄積し、対象ユーザーと行動パターンが似ている他のユーザーのデータを用いて商品を推奨する手法を何と呼ぶでしょうか?

① コンテンツベースフィルタリング
② 協調フィルタリング
③ 決定木分析
④ 主成分分析


2. 【 解答 】

正解: ② 協調フィルタリング

3. 整理:2つの主要なアプローチ

協調フィルタリングには、何を基準に「似ている」と判定するかで2つの形式があります。

【 協調フィルタリングの分類 】

[ 1. ユーザーベース ]
あなたと「購買履歴が似ているAさん」を探し、Aさんが買ってあなたがまだ買っていないものを勧める。

[ 2. アイテムベース ]
商品Aを買った人は商品Bも買う傾向がある場合、商品Aを買ったあなたに商品Bを勧める。

--------------------------

特徴: 商品の中身(色や形、スペック)を知らなくても、ユーザーの「行動」さえあればレコメンドできるのが強みです。

4. 覚えておくべき課題「コールドスタート」

協調フィルタリングには最大の弱点があります。それは、「データが少ない新規ユーザーや新商品にはレコメンドができない」という点です。これを「コールドスタート問題」と呼び、DS検定の頻出キーワードとなっています。


5. DS検定形式:実戦4択クイズ

問:ユーザーの属性や商品の特徴(色、ジャンル、テキスト説明など)そのものを分析してレコメンドを行う、協調フィルタリングとは異なる手法はどれか。

① ユーザーベース法   ② アイテムベース法   ③ 内容ベース(コンテンツベース)フィルタリング   ④ 行列分解法

【 正解: ③ 】

解説: 「好みが似ている人」ではなく「商品そのものの特徴」に注目するのが内容ベース(コンテンツベース)です。両者を組み合わせた「ハイブリッド型」も実務ではよく使われます。


6. まとめ

DS検定において「ユーザーの行動履歴」「似たユーザーのパターン」という記述が出たら「協調フィルタリング」です。新米ユーザーには効かない「コールドスタート問題」とセットで覚えておきましょう!


【DS検定対策】AIの「知識の源」!コーパス(Corpus)の重要性

AIが言葉を理解し、生成するためには、お手本となる膨大な文章データが必要です。単なるテキストの集まりを超えた「コーパス」の役割を学びましょう。

1. 【 問題 】

自然言語処理において、言語の法則や構造を抽出するために、実際の言語使用例を大量に集め、検索や分析ができるように構造化したデータベースを何と呼ぶでしょうか?

① 形態素
② コーパス(Corpus)
③ オントロジー
④ シソーラス


2. 【 解答 】

正解: ② コーパス(Corpus)

3. 整理:ただの「文章」と「コーパス」の違い

インターネット上の文章をただ集めただけでは、質の高いAIは育ちません。コーパスには「構造化」という重要な工程が含まれます。

【 コーパスを構成する要素 】

[ 1. 生テキスト(Raw Text) ]
小説、ニュース、SNS、論文など、実際に使われている文章。

[ 2. アノテーション(メタデータ) ]
★ ここが重要!
単語ごとに「品詞情報」を付与したり、文の「感情スコア」を付けたりして、コンピュータが処理しやすい情報を付け加えること。

--------------------------

代表的なコーパス:
・現代日本語書き言葉均衡コーパス(BCCWJ)
・Wikipediaのダンプデータ
・青空文庫のテキストデータ

4. コーパスの活用シーン

1. 辞書・文法作成: 言葉の使われ方を統計的に分析し、より自然な文法モデルを作ります。
2. LLMの学習: ChatGPTなどの大規模言語モデルも、Web上の巨大なコーパスを学習することで言語能力を獲得しています。
3. 翻訳精度向上: 対訳コーパス(日本語と英語が対になったデータ)により、翻訳AIを強化します。


5. DS検定形式:実戦4択クイズ

問:コーパスに品詞情報などの付随情報を追加する作業を一般に何と呼ぶか。

① クレンジング   ② アノテーション   ③ スクレイピング   ④ トークン化

【 正解: ② 】

解説: データに対して「ラベル」や「注釈」を付ける作業をアノテーションと呼びます。コーパスの価値は、このアノテーションの質と量で決まると言っても過言ではありません。


6. まとめ

DS検定において「言語を構造化したデータベース」「大量の使用例」という表現が出たら「コーパス」です。データベースエンジニアとしても、非構造化データを構造化データに変える「情報の宝庫」として覚えておきたい用語ですね!