19 概率论在AI中的应用示例

19 概率论在AI中的应用示例

概率分布与数据建模

在机器学习中,概率分布被广泛应用于对数据进行建模。例如,在高斯分布中,我们可以用以下公式表示其概率密度函数(PDF):

$$
f(x) = \frac{1}{\sqrt{2\pi\sigma^2}} e^{-\frac{(x-\mu)^2}{2\sigma^2}}
$$

案例: 假设我们有一组学生的考试分数,我们可以通过计算分数的均值($\mu$)和标准差($\sigma$)来拟合一个高斯分布,从而推测学生分数的特性。

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 生成模拟数据
data = np.random.normal(loc=75, scale=10, size=1000)

# 绘制分布图
sns.histplot(data, bins=30, kde=True)
plt.title('Student Scores Distribution')
plt.xlabel('Scores')
plt.ylabel('Frequency')
plt.show()

条件概率与贝叶斯定理

条件概率用于描述一个事件在另一个事件已发生的条件下的概率。在AI中,贝叶斯定理常用于分类问题。贝叶斯公式为:

$$
P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}
$$

案例: 假设我们要通过症状($B$)推测疾病($A$)。如果我们知道某种症状出现的可能性,结合疾病发生的先验概率,可以使用贝叶斯定理计算得出后验概率。

1
2
3
4
5
6
7
8
# 假设有以下条件:
P_A = 0.01 # 疾病的先验概率
P_B_given_A = 0.9 # 得到症状的条件概率
P_B = 0.02 # 获得症状的总体概率

# 计算后验概率
P_A_given_B = (P_B_given_A * P_A) / P_B
print(f"P(Disease | Symptom) = {P_A_given_B:.4f}")

期望与方差

期望值方差是描述随机变量特性的重要统计量。期望值用于反映随机变量的“中心位置”,而方差则反映了数据的分散程度。

$$
E[X] = \sum (x_i \cdot P(x_i))
$$

$$
Var(X) = E[X^2] - (E[X])^2
$$

案例: 如果我们有一个骰子投掷的结果,计算其期望和方差:

1
2
3
4
5
6
7
8
9
10
11
12
# 骰子的可能结果和对应的概率
outcomes = np.array([1, 2, 3, 4, 5, 6])
probabilities = np.array([1/6] * 6)

# 期望值
expected_value = np.sum(outcomes * probabilities)

# 方差
variance = np.sum((outcomes - expected_value)**2 * probabilities)

print(f"Expected Value: {expected_value:.2f}")
print(f"Variance: {variance:.2f}")

马尔科夫链与状态转移

马尔科夫链是描述系统状态变化的重要工具。它依赖于转移概率,即在给定当前状态下,转移到下一个状态的概率。

$$
P(X_{n+1} = j | X_n = i) = p_{ij}
$$

案例: 在一个简单的天气模型中,我们可以使用马尔科夫链描述晴天和雨天之间的转移关系。

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np

# 状态转移矩阵
transition_matrix = np.array([[0.8, 0.2], # 晴天到晴天和雨天的概率
[0.4, 0.6]]) # 雨天到晴天和雨天的概率

# 初始状态
state = np.array([1, 0]) # 1表示晴天,0表示雨天

# 模拟10天的天气变化
for day in range(10):
state = np.dot(state, transition_matrix)
print(f"Day {day+1}: Sunny Probability: {state[0]:.2f}, Rainy Probability: {state[1]:.2f}")

模拟与抽样方法

蒙特卡罗模拟是通过随机采样来估计数值的方法。该方法常用于计算复杂的积分和概率。

案例: 我们可以用蒙特卡罗方法估计圆周率:

1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np

n = 1000000 # 生成的随机点的数量
inside_circle = 0

for _ in range(n):
x, y = np.random.uniform(-1, 1, 2) # 随机生成点
if x**2 + y**2 <= 1: # 判断是否在单位圆内
inside_circle += 1

pi_estimate = 4 * inside_circle / n
print(f"Estimated π: {pi_estimate:.5f}")

通过上述示例,可以看到概率论在人工智能领域的多种应用。从数据建模、分类决策,到随机过程和数值模拟,概率理论为AI提供了强大而灵活的方法论基础。

20 基本概念

20 基本概念

线性回归概述

线性回归是一种统计分析方法,用于描述自变量与因变量之间的线性关系。在人工智能和机器学习领域,线性回归被广泛应用于预测和推断任务。

在最简单的形式中,线性回归试图找到一个直线(线性方程)来拟合数据点。其数学表达为:

$$
y = \beta_0 + \beta_1 x + \epsilon
$$

其中:

  • $y$ 是因变量(目标变量)
  • $x$ 是自变量(特征变量)
  • $\beta_0$ 是截距
  • $\beta_1$ 是斜率
  • $\epsilon$ 是误差项

目标

线性回归的目标是通过调整参数 $\beta_0$ 和 $\beta_1$,最小化预测值与实际观察值之间的误差。通常使用的损失函数是均方误差(MSE):

$$
MSE = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y_i})^2
$$

其中 $y_i$ 是实际值,$\hat{y_i}$ 是预测值,$n$ 是样本数量。

案例分析

假设我们有一组关于房价的数据集,包含两个变量:面积(平方英尺)和房价(美金)。我们的目标是根据房子的面积来预测房价。

示例数据如下:

面积 (平方英尺) 房价 (美金)
1500 300000
2000 400000
2500 500000
3000 600000

实现线性回归

我们可以使用 Python 的 scikit-learn 库来实现线性回归模型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

# 创建数据集
data = {
'面积': [1500, 2000, 2500, 3000],
'房价': [300000, 400000, 500000, 600000]
}
df = pd.DataFrame(data)

# 准备训练数据
X = df[['面积']] # 自变量
y = df['房价'] # 因变量

# 创建并训练模型
model = LinearRegression()
model.fit(X, y)

# 打印模型参数
print("截距:", model.intercept_)
print("斜率:", model.coef_[0])

# 预测
面积新房 = np.array([[2200]])
预测房价 = model.predict(面积新房)
print(f"2200平方英尺房子的预测价格为: {预测房价[0]}美金")

# 可视化
plt.scatter(X, y, color='blue', label='实际数据')
plt.plot(X, model.predict(X), color='red', label='预测线')
plt.xlabel('面积 (平方英尺)')
plt.ylabel('房价 (美金)')
plt.title('面积与房价的线性回归')
plt.legend()
plt.show()

结论

线性回归是一种简单而强大的工具,能够帮助我们理解自变量与因变量之间的关系。在许多实际应用中,比如房价预测、销售额预测等,线性回归都能提供有效的解决方案。在了解基础知识后,我们可以继续深入探索更复杂的线性回归模型,例如多元线性回归。

21 逻辑回归与概率

21 逻辑回归与概率

逻辑回归简介

逻辑回归是一种常用于分类问题的统计方法,尽管其名字中有“回归”二字,但它主要用于预测分类标签而非数值。它的目标是预测样本属于某一类别的概率,常见于二分类问题中。

概率基础

在逻辑回归中,我们需要理解 概率 的基本概念。一个事件发生的概率可以用一个介于 0 和 1 之间的数字来表示,其中 0 代表事件不发生,1 代表事件必定发生。

对于逻辑回归,我们通常需要计算样本属于某一特定类别的概率。例如,给定输入特征的向量 $X$,我们希望预测样本 $Y$ 属于类别 1 的概率 $P(Y=1|X)$。

逻辑回归模型

逻辑回归通过一个 sigmoid 函数将线性组合的结果映射到 0 和 1 之间。设输入特征为 $X$,模型的输出为:

$$
z = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + … + \beta_n X_n
$$

然后使用 sigmoid 函数将 $z$ 映射到概率 $P$:

$$
P(Y=1|X) = \sigma(z) = \frac{1}{1 + e^{-z}}
$$

其中,$e$ 是自然对数的底数,$\beta$ 是模型的参数。

概率解释

对于预测 $P(Y=1|X)$,如果 $P(Y=1|X) > 0.5$,我们通常将样本分类为类别 1;否则分类为类别 0。这种决策阈值可以根据具体问题进行调整。

案例分析

考虑一个二分类的案例,假设我们有一些关于患者健康数据的特征,如年龄和体重,我们的目标是预测患者是否有糖尿病(1表示有糖尿病,0表示没有)。我们可以构建一个逻辑回归模型来预测患者的糖尿病概率。

数据准备

假设我们有以下数据:

年龄 体重 糖尿病
30 70 0
45 85 1
35 75 0
50 90 1

建立模型

使用Python的 scikit-learn 库构建逻辑回归模型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# 创建数据框
data = pd.DataFrame({
'Age': [30, 45, 35, 50],
'Weight': [70, 85, 75, 90],
'Diabetes': [0, 1, 0, 1]
})

# 特征和标签
X = data[['Age', 'Weight']]
y = data['Diabetes']

# 拆分数据为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)

# 创建并训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 预测
predictions = model.predict(X_test)
probabilities = model.predict_proba(X_test)
print("Predictions:", predictions)
print("Probabilities:", probabilities)

在这个例子中,使用逻辑回归模型可以得到每个患者有糖尿病的概率,以及根据这些概率做出分类决策。

结论

逻辑回归通过将线性模型结果映射到概率空间,为二分类问题提供了一种简单而有效的方法。理解逻辑回归中的概率概念,能够帮助我们在实际应用中更好地进行预测。