はじめに
高校数学で学ぶ「数と式」「関数」「三角比」「集合」「データの分析」は、すべて現代のAI・機械学習・制御工学に密接に関わっています。
本シリーズでは、実教出版『数学I』の構成に沿って、それぞれのトピックがどのように実世界で活用されているのかを、具体的な数式・Pythonコードとともに読み解いていきます。
0.1 連立方程式の基礎
0.1.1 定義
-
連立方程式:未知数 $x_1, x_2, \dots, x_n$ が登場する複数の式をまとめたもの。
$$
\begin{cases}
a_{11}x_1 + a_{12}x_2 + \cdots + a_{1n}x_n = b_1 \
a_{21}x_1 + a_{22}x_2 + \cdots + a_{2n}x_n = b_2 \
\ \ \vdots \
a_{m1}x_1 + a_{m2}x_2 + \cdots + a_{mn}x_n = b_m
\end{cases}
$$ -
行列表現:係数行列 $A \in \mathbb{R}^{m\times n}$,未知数ベクトル $x \in \mathbb{R}^n$,定数ベクトル $b\in\mathbb{R}^m$ として
$$
A x = b
$$
0.1.2 解の種類
- 一意解:係数行列 $A$ の列が一次独立で,かつ $m=n$ の場合に存在。
- 無限解:未知数の自由度が残る場合(ランクが低い)。
- 解なし:方程式系が矛盾するとき。
0.2 代表的な解法
0.2.1 ガウスの消去法(前進消去と後退代入)
- 前進消去:ピボット選択→行基本変形で上三角行列化
- 後退代入:上三角から未知数を順に解く
for k = 1 … n-1:
for i = k+1 … n:
factor = A[i,k] / A[k,k]
A[i,k:n] = A[i,k:n] - factor * A[k,k:n]
b[i] = b[i] - factor * b[k]
# 後退代入
x[n] = b[n] / A[n,n]
for i = n-1 … 1:
x[i] = (b[i] - sum_{j=i+1}^n A[i,j]*x[j]) / A[i,i]
0.2.2 逆行列による解法(正方行列のみ)
$$
x = A^{-1} b
$$
ただし,逆行列の計算コストが高いため,大規模系ではガウス消去や分解法を用いる。
0.2.3 LU分解
$$
A = L U,\quad L:下三角行列,\ U:上三角行列
$$
- 前進代入で $L y = b$ を解き
- 後退代入で $U x = y$ を解く
0.3 機械学習における連立方程式の役割
0.3.1 線形回帰モデル
観測データ ${(x^{(i)}, y^{(i)})}_{i=1}^N$ に対し,パラメータ $\theta\in\mathbb{R}^d$ を最小二乗法で推定:
$$
\min_\theta \sum_{i=1}^N \bigl(y^{(i)} - \theta^\mathsf{T} x^{(i)}\bigr)^2
$$
導関数をゼロにすると,連立方程式:
$$
X^\mathsf{T} X,\theta = X^\mathsf{T} y
$$
ここで,設計行列 $X\in\mathbb{R}^{N\times d}$,出力ベクトル $y\in\mathbb{R}^N$。
0.3.2 正則化付き線形回帰(リッジ回帰)
$$
(X^\mathsf{T}X + \lambda I),\theta = X^\mathsf{T}y
$$
$\lambda>0$ により,行列の条件数改善と過学習抑制を同時に達成。
0.4 応用例:Pythonによる実装スニペット
以下は,NumPy を用いて線形回帰パラメータを解く例。
import numpy as np
# ダミーデータ生成
N, d = 100, 2
X = np.random.randn(N, d)
theta_true = np.array([2.0, -1.0])
y = X @ theta_true + 0.1 * np.random.randn(N)
# 正規方程式による最小二乗解
# theta_hat = np.linalg.inv(X.T @ X) @ (X.T @ y)
# 安定的には lstsq を用いる
theta_hat, residuals, rank, s = np.linalg.lstsq(X, y, rcond=None)
print("推定パラメータ:", theta_hat)
第1章:数と式 × モデルの数式構造
● 1節:整式とモデルの構文理解
① 文字式の決まり → 線形モデルの基本式
高校数学:
$$
y = ax + b
$$
AIでは、これは線形回帰モデルの予測式:
$$
\hat{y} = wx + b
$$
def linear_model(x, w, b):
return w * x + b
② 整式 → ニューラルネットワークの重み付き和
多項式:
$$
y = a_1x^2 + a_2x + a_3
$$
機械学習では、入力が複数の特徴量に対応:
$$
y = w_1x_1 + w_2x_2 + \cdots + w_nx_n + b
\quad \Rightarrow \quad y = \mathbf{w}^\top \mathbf{x} + b
$$
③ 加法・減法 → 損失関数の合成
$$
L = L_{\text{data}} + \lambda L_{\text{reg}}
$$
例:
L = mse_loss + lambda_ * l2_regularization
④ 乗法 → 内積・特徴量変換
$$
(a + b)(c + d) = ac + ad + bc + bd
$$
これは、テンソル演算やフィルタ処理の基礎でもある。
⑤ 乗法公式 → 勾配の導出、非線形活性
$$
(a + b)^2 = a^2 + 2ab + b^2
$$
- 損失関数の勾配展開
- 活性化関数(例:Softplus)の近似式
発展:3乗公式
$$
(a + b)^3 = a^3 + 3a^2b + 3ab^2 + b^3
$$
非線形活性層の高次項近似にも用いられる。
⑥ 因数分解 → コード最適化・共通項抽出
$$
x^2 + 5x + 6 = (x+2)(x+3)
$$
- モデルの共通項抽出
- コード圧縮・処理分岐の最小化などに応用
● 2節:実数とデータ表現
① 平方根とその計算 → L2ノルム、誤差距離
$$
d = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}
$$
import numpy as np
np.linalg.norm(x1 - x2)
② 実数 → センサ・画像・音声の連続値処理
- 実数(float型)が基本
- 離散信号の処理でも量子化の精度に直結
● 3節:方程式と不等式
① 1次方程式 → 最小2乗法によるパラメータ推定
$$
y = wx + b \quad \Rightarrow \quad \text{loss}(w) = (wx + b - t)^2
$$
→ 最小化で $w$ を学習
② 不等式 → if文、分類ロジック
if score > 0.5:
return "positive"
③ 不等式の性質 → 論理演算と安全設計
- 両辺に負の値をかけると向きが逆
- 制御分野での閾値処理、電圧制限設計に応用
④ 1次不等式 → ReLU関数の実装
$$
f(x) = \max(0, x)
$$
def relu(x):
return max(0, x)
⑤ 連立不等式 → 安全領域の設計、SVMのマージン領域
$$
a < x \leq b
\quad \Rightarrow \quad \text{安全な入力範囲}
$$
⑥ 不等式の応用 → 最適化、性能保証
- 効率の良い範囲探索
- 設計条件の制約式(制御工学・AI制約付き学習)
第2章:2次関数 × 最小値・活性化関数の曲線・最適化問題
🔹 1節:関数とグラフ
1. 1次関数とそのグラフ → 線形モデルの可視化
数学:
$$
y = ax + b
$$
AI・工学:
- 線形回帰の基本モデル
- 境界線の決定(例:ロジスティック回帰)
import matplotlib.pyplot as plt
x = [i for i in range(-5, 6)]
y = [2*i + 1 for i in x] # y = 2x + 1
plt.plot(x, y)
plt.grid(True)
plt.show()
2. 2次関数とそのグラフ → 活性化関数・損失関数の形状
数学:
$$
y = ax^2 + bx + c
$$
AI:
- 活性化関数の曲線(Softplus、Swishなど)
- 損失関数(mean squared error)の形状は基本的に「上に凸」の2次関数
🔹 2節:2次関数の値の変化
1. 最大値・最小値 → 最適化問題の核心
数学(頂点のx座標):
$$
x = -\frac{b}{2a}
$$
工学・AI(最小値問題):
- パラメータ $w$ に対する損失関数 $L(w)$ を最小化
- 勾配降下法(Gradient Descent)の初学的導入に相当
例:
$$
L(w) = (wx + b - t)^2
$$
最小となる $w$ を探すのが学習
2. 2次関数と2次方程式 → ニューラルネットの出力解析
数学:
$$
ax^2 + bx + c = 0
$$
AI:
- ニューラルネットの出力が2次形式になる場面で、解の存在条件や判別式が意味を持つ
判別式:
$$
D = b^2 - 4ac
$$
3. 2次関数と2次不等式 → 閾値条件・分類ロジック
数学:
$$
ax^2 + bx + c > 0
$$
AI・工学:
- 区間分類:ある範囲でのみONになる条件
- ReLU^2 や 条件付き損失のような形状の出力関数に応用
例:SVM(サポートベクターマシン)
分類条件:
$$
y_i(w^\top x_i + b) \geq 1
\quad\text{(不等式でクラス分離)}
$$
第3章:三角比 × コンピュータビジョン・信号処理・ロボティクス
🔹 1節:三角比の定義と基本性質
1. 三角形の辺と角度 → 幾何ベースの推論
数学:
- 三角形の基本構成要素(角度・辺の長さ)
応用:
- 2D画像からの角度推定
- ドローン・ロボットの姿勢計測
- LiDARセンサでの距離と角度測定
2. 三角比の定義 → 回転行列・ベクトル投影
高校数学の定義:
$$
\sin \theta = \frac{\text{対辺}}{\text{斜辺}},\quad
\cos \theta = \frac{\text{隣辺}}{\text{斜辺}},\quad
\tan \theta = \frac{\text{対辺}}{\text{隣辺}}
$$
応用:
- ベクトルを回転させる際に、回転行列に三角比が含まれる
$$
\begin{bmatrix}
\cos \theta & -\sin \theta \
\sin \theta & \cos \theta
\end{bmatrix}
$$
Python例(2D回転):
import numpy as np
theta = np.radians(30)
R = np.array([[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]])
v = np.array([1, 0])
rotated_v = R @ v
3. 三角比の利用 → ロボットの座標計算・ドローンの方向制御
- モーションキャプチャやロボットの関節角の計算
- 座標変換における正弦・余弦の直接的使用
- 信号の位相処理でも sin, cos は不可欠
4. 三角比の相互関係 → 単位円・フーリエ変換への橋渡し
高校数学の恒等式:
$$
\sin^2\theta + \cos^2\theta = 1
$$
応用:
- 信号処理における正弦・余弦波の性質
- 正規直交基底(Fourier基底)の導出に重要
🔹 2節:三角比の応用
1. 三角比の拡張 → 単位円での定義
- $\theta$ が 0〜360°(あるいは $0$ 〜 $2\pi$)の任意角に拡張
- 回転・周期信号・MIDIノートの周期変換にも応用
2. 三角形の面積 → 工学的面積測定・画像領域分割
高校数学:
$$
S = \frac{1}{2} ab \sin C
$$
応用:
- ロボットビジョンにおける三角分割
- 領域認識・ポリゴン内面積の計算
3. 正弦定理 → カメラ視点からの奥行き推定
$$
\frac{a}{\sin A} = \frac{b}{\sin B} = \frac{c}{\sin C}
$$
- 三角測量(GPS・AR空間構築)
- 2点間の視差情報をもとに距離推定
4. 余弦定理 → ベクトルの内積、角度測定
$$
c^2 = a^2 + b^2 - 2ab\cos C
$$
AI応用:
- コサイン類似度(ベクトル間の角度的距離)
$$
\cos \theta = \frac{\vec{a} \cdot \vec{b}}{|\vec{a}||\vec{b}|}
$$
Pythonコード:
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
5. 正弦定理と余弦定理の利用 → 3Dスキャン・センサ融合
- 深度推定(ステレオカメラ)
- 三角形的構造から未知の長さや角度を導出
第4章:集合と論証 × 論理・条件分岐・AIアルゴリズムの正しさ検証
🔹 1節:集合と要素 → データ属性と分類ロジック
1. 集合と要素の記述 → データベース・クラスタリング・if文制御
高校数学:
-
集合の表記:
$$
A = {x \in \mathbb{R} \mid x > 0}
$$ -
属する/属さない:
$$
x \in A,\quad y \notin B
$$
応用:
- 属性ベースの分類:
例)「温度 > 25℃ かつ 湿度 < 60%」という条件集合 - if文による分類制御:
if temp > 25 and humidity < 60:
state = "Cool"
集合の演算と条件分岐の対応
数学記号 | 意味 | Python対応 |
---|---|---|
$A \cup B$ | 和集合 | A or B |
$A \cap B$ | 共通部分 | A and B |
$A \setminus B$ | 差集合 | A and not B |
$A^\complement$ | 補集合 | not A |
これらはすべて**ブール演算(論理回路)**と直結しています。
🔹 2節:命題と証明 → AIの判断と正しさの保証
1. 命題の構造 → 推論エンジン・ルールベースAIの論理形式
高校数学:
- 命題 $p \Rightarrow q$
- 真理値表、必要条件・十分条件の区別
AI応用:
-
条件つきルール推論:
$$
\text{「猫ならば哺乳類」} = (\text{is_cat} \Rightarrow \text{is_mammal})
$$
def infer_mammal(is_cat):
if is_cat:
return "Mammal"
else:
return "Unknown"
2. 命題の対偶・否定 → バグ回避・条件検証に不可欠
数学:
- 対偶:$p \Rightarrow q$ ⇔ $\neg q \Rightarrow \neg p$
- 否定:$\neg(p \Rightarrow q) \equiv p \land \neg q$
AIアルゴリズムの検証で重要:
- 「結果が偽なら前提も偽でなければならない」
→ ユニットテストや例外処理の論理的設計に活用
3. 証明法 → アルゴリズムの正しさの保証
証明法 | 数学での内容 | AI/工学的応用 |
---|---|---|
直接証明 | $A \Rightarrow B$ をそのまま示す | 推論の正しさ証明 |
対偶証明 | $\neg B \Rightarrow \neg A$ | バグ回避、逆検証 |
背理法 | 矛盾を導いて否定 | ロジックチェッカーの反証 |
全称命題 | 任意の $x$ に対して成り立つことを証明 | 汎用的アルゴリズムの正当性確認 |
存在命題 | ある $x$ に対して成り立つ | サンプル例による動作検証 |
第5章:データの分析 × 統計処理・線形回帰・機械学習
🔹 1節:データの分析とモデル設計
1. 統計とグラフ → 可視化・前処理の基本
高校数学:
- 度数分布・折れ線グラフ・ヒストグラムなどによるデータの可視化
AI・データ分析:
- **EDA(探索的データ解析)**の初手は、まさにグラフ化
import matplotlib.pyplot as plt
plt.hist(data, bins=10)
plt.title("Histogram of Input Data")
plt.show()
2. 度数分布表とヒストグラム → 正規化前の分布確認
数学:
- ヒストグラムにより分布形状(正規・右偏・左偏など)を把握
AI:
- ヒストグラム=特徴量の「偏り」を把握 → スケーリングや正規化に活かす
3. 代表値(平均・中央値・最頻値) → データの中心と特性の把握
数学:
$$
\text{平均} = \frac{1}{n} \sum_{i=1}^n x_i,\quad
\text{中央値} = \text{中央値位置の値},\quad
\text{最頻値} = \text{出現回数最大の値}
$$
AI応用:
- 平均:標準化や重心、初期重みの推定
- 中央値:外れ値除去(ロバスト指標)
- 最頻値:分類ラベルの多数決(mode分類)
4. データの散らばり → 分散・標準偏差・正規化の指標
高校数学:
$$
\text{分散} = \frac{1}{n} \sum_{i=1}^n (x_i - \bar{x})^2,\quad
\text{標準偏差} = \sqrt{\text{分散}}
$$
AI:
- 入力データのスケーリング(平均0、分散1)に用いられる
x_norm = (x - x.mean()) / x.std()
5. 相関関係 → 線形回帰・特徴量選択の前提
数学:
$$
r = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum (x_i - \bar{x})^2} \sqrt{\sum (y_i - \bar{y})^2}}
$$
- $r > 0$:正の相関
- $r < 0$:負の相関
- $|r| \approx 1$:強い線形関係
AI・統計学:
- 相関係数を使って、予測に有効な特徴量を選定(特徴選択)
🔹 線形回帰:高校数学の1次関数がそのままモデルに
線形回帰のモデル式
$$
\hat{y} = wx + b
$$
これは高校数学の:
$$
y = ax + b
$$
と完全に一致。
損失関数(誤差関数)
$$
L(w, b) = \frac{1}{n} \sum_{i=1}^n (\hat{y}_i - y_i)^2
$$
→ 最小二乗法(最小になるような w, b を求める)
実装(scikit-learn 例)
from sklearn.linear_model import LinearRegression
X = [[x1], [x2], [x3], ...]
y = [t1, t2, t3, ...]
model = LinearRegression()
model.fit(X, y)
print("傾き:", model.coef_)
print("切片:", model.intercept_)