本文隶属于专栏《机器学习数学通关指南》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和参考文献请见《机器学习数学通关指南》
机器学习视角:特征向量中的任意两个特征可视为二维随机变量,了解它们的联合分布有助于特征选择与处理
示例:
在图像识别中,像素强度和梯度方向构成二维随机变量,它们的联合分布特征对图像分类至关重要
联合分布函数:
F ( x , y ) = P { X ≤ x , Y ≤ y } F(x, y) = P\{X \leq x, Y \leq y\} F(x,y)=P{X≤x,Y≤y}
核心性质:
机器学习应用:
离散特征(如用户类别、产品评级)间的关系分析常用离散型二维分布建模
# 模拟计算购买历史(X)与评分(Y)的联合分布表
import pandas as pd
import numpy as np
# 模拟数据
data = {
'purchase_count': np.random.poisson(lam=2, size=1000), # 0,1,2...次购买
'rating': np.random.randint(1, 6, size=1000) # 1-5星评分
}
df = pd.DataFrame(data)
# 计算联合分布
joint_prob = pd.crosstab(df['purchase_count'], df['rating'], normalize=True)
print("购买次数与评分的联合分布:")
print(joint_prob)
联合概率密度函数 f ( x , y ) f(x, y) f(x,y):
P { ( X , Y ) ∈ D } = ∬ D f ( x , y ) d x d y P\{(X, Y) \in D\} = \iint_D f(x, y) \, dx dy P{(X,Y)∈D}=∬Df(x,y)dxdy
分布函数与密度的关系:
F ( x , y ) = ∫ − ∞ x ∫ − ∞ y f ( u , v ) d u d v F(x, y) = \int_{-\infty}^x \int_{-\infty}^y f(u, v) \, du dv F(x,y)=∫−∞x∫−∞yf(u,v)dudv
密度函数性质:
f ( x , y ) ≥ 0 , ∫ − ∞ + ∞ ∫ − ∞ + ∞ f ( x , y ) d x d y = 1 f(x,y) \geq 0, \quad \int_{-\infty}^{+\infty}\int_{-\infty}^{+\infty} f(x,y)dxdy = 1 f(x,y)≥0,∫−∞+∞∫−∞+∞f(x,y)dxdy=1
重要示例:二维正态分布
f ( x , y ) = 1 2 π σ X σ Y 1 − ρ 2 e − 1 2 ( 1 − ρ 2 ) [ ( x − μ X ) 2 σ X 2 − 2 ρ ( x − μ X ) ( y − μ Y ) σ X σ Y + ( y − μ Y ) 2 σ Y 2 ] f(x, y) = \frac{1}{2\pi\sigma_X\sigma_Y\sqrt{1-\rho^2}} e^{-\frac{1}{2(1-\rho^2)}\left[\frac{(x-\mu_X)^2}{\sigma_X^2} - 2\rho\frac{(x-\mu_X)(y-\mu_Y)}{\sigma_X\sigma_Y} + \frac{(y-\mu_Y)^2}{\sigma_Y^2}\right]} f(x,y)=2πσXσY1−ρ21e−2(1−ρ2)1[σX2(x−μX)2−2ρσXσY(x−μX)(y−μY)+σY2(y−μY)2]
⭐ 机器学习重要性:二维正态分布是多变量高斯分布的基础,广泛应用于贝叶斯学习、PCA分解等算法
# 二维正态分布可视化
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
def plot_bivariate_normal(mu_x=0, mu_y=0, sigma_x=1, sigma_y=1, rho=0):
# 创建网格点
x = np.linspace(mu_x-3*sigma_x, mu_x+3*sigma_x, 100)
y = np.linspace(mu_y-3*sigma_y, mu_y+3*sigma_y, 100)
X, Y = np.meshgrid(x, y)
# 构建位置矩阵
pos = np.empty(X.shape + (2,))
pos[:, :, 0] = X
pos[:, :, 1] = Y
# 定义二维正态分布
mean = [mu_x, mu_y]
cov = [[sigma_x**2, rho*sigma_x*sigma_y],
[rho*sigma_x*sigma_y, sigma_y**2]]
rv = stats.multivariate_normal(mean, cov)
# 计算PDF
Z = rv.pdf(pos)
# 绘图
fig = plt.figure(figsize=(12, 5))
# 3D表面
ax1 = fig.add_subplot(121, projection='3d')
surf = ax1.plot_surface(X, Y, Z, cmap='viridis', alpha=0.8)
ax1.set_xlabel('X')
ax1.set_ylabel('Y')
ax1.set_zlabel('密度')
ax1.set_title(f'二维正态分布 (ρ={rho})')
# 等高线图
ax2 = fig.add_subplot(122)
contour = ax2.contourf(X, Y, Z, cmap='viridis', levels=20)
plt.colorbar(contour, ax=ax2)
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
ax2.set_title(f'等高线图 (ρ={rho})')
plt.tight_layout()
plt.show()
# 可视化不同相关系数的二维正态分布
plot_bivariate_normal(rho=0.8) # 高度正相关
边缘分布函数:
F X ( x ) = F ( x , + ∞ ) , F Y ( y ) = F ( + ∞ , y ) F_X(x) = F(x, +\infty), \quad F_Y(y) = F(+\infty, y) FX(x)=F(x,+∞),FY(y)=F(+∞,y)
离散型边缘分布:
P { X = x i } = ∑ j p i j , P { Y = y j } = ∑ i p i j P\{X = x_i\} = \sum_{j} p_{ij}, \quad P\{Y = y_j\} = \sum_{i} p_{ij} P{X=xi}=∑jpij,P{Y=yj}=∑ipij
连续型边缘密度:
f X ( x ) = ∫ − ∞ + ∞ f ( x , y ) d y , f Y ( y ) = ∫ − ∞ + ∞ f ( x , y ) d x f_X(x) = \int_{-\infty}^{+\infty} f(x, y) \, dy, \quad f_Y(y) = \int_{-\infty}^{+\infty} f(x, y) \, dx fX(x)=∫−∞+∞f(x,y)dy,fY(y)=∫−∞+∞f(x,y)dx
机器学习启示:特征的边缘分布帮助我们理解单个特征的行为,但无法完全反映特征间的相互作用,因此需要联合分析
条件分布函数:
F X ∣ Y ( x ∣ y ) = P { X ≤ x ∣ Y = y } = ∂ ∂ y F ( x , y ) f Y ( y ) F_{X|Y}(x|y) = P\{X \leq x | Y = y\} = \frac{\frac{\partial}{\partial y}F(x,y)}{f_Y(y)} FX∣Y(x∣y)=P{X≤x∣Y=y}=fY(y)∂y∂F(x,y)
条件概率密度:
f X ∣ Y ( x ∣ y ) = f ( x , y ) f Y ( y ) f_{X|Y}(x|y) = \frac{f(x,y)}{f_Y(y)} fX∣Y(x∣y)=fY(y)f(x,y)
机器学习应用:
# 二维正态分布的条件分布示例
def conditional_gaussian(mu_x, mu_y, sigma_x, sigma_y, rho, y_value):
"""返回Y=y_value条件下X的条件分布参数"""
cond_mean = mu_x + rho * (sigma_x/sigma_y) * (y_value - mu_y)
cond_var = (1 - rho**2) * sigma_x**2
return cond_mean, np.sqrt(cond_var)
特征工程启示:若两特征独立,则联合使用它们可以提供更多信息;若高度相关,可考虑降维
协方差:
Cov ( X , Y ) = E [ ( X − μ X ) ( Y − μ Y ) ] = E [ X Y ] − E [ X ] E [ Y ] \text{Cov}(X, Y) = E[(X - \mu_X)(Y - \mu_Y)] = E[XY] - E[X]E[Y] Cov(X,Y)=E[(X−μX)(Y−μY)]=E[XY]−E[X]E[Y]
Pearson相关系数:
ρ X Y = Cov ( X , Y ) σ X σ Y , ∣ ρ X Y ∣ ≤ 1 \rho_{XY} = \frac{\text{Cov}(X, Y)}{\sigma_X \sigma_Y}, \quad |\rho_{XY}| \leq 1 ρXY=σXσYCov(X,Y),∣ρXY∣≤1
相关性分析要点:
# 相关系数与协方差矩阵计算
import numpy as np
from sklearn.datasets import make_classification
# 生成具有不同相关性的特征
X, _ = make_classification(n_samples=1000, n_features=2,
n_informative=2, n_redundant=0,
random_state=42)
# 计算协方差矩阵
cov_matrix = np.cov(X, rowvar=False)
print("协方差矩阵:\n", cov_matrix)
# 计算相关系数矩阵
corr_matrix = np.corrcoef(X, rowvar=False)
print("\n相关系数矩阵:\n", corr_matrix)
应用领域 | 二维随机变量的作用 |
---|---|
特征选择 | 通过相关性分析筛选冗余特征 |
降维技术 | PCA依赖特征间的协方差结构 |
贝叶斯网络 | 利用条件概率和条件独立性建模 |
生成模型 | 模拟多维数据的联合分布 |
异常检测 | 基于联合分布识别异常点 |
客户行为分析:购买频率与消费金额构成二维随机变量,可用于客户分群
金融风控:
计算机视觉:
# 可视化金融数据中的二维分布
import seaborn as sns
import pandas as pd
import numpy as np
# 模拟收入和信用评分数据
np.random.seed(42)
n = 1000
income = np.random.lognormal(mean=10, sigma=0.5, size=n)
# 模拟相关性:信用评分与收入相关但有随机波动
credit_score = 300 + 0.0003 * income + np.random.normal(0, 50, n)
credit_score = np.clip(credit_score, 300, 850) # 信用分数范围
# 创建数据框
df = pd.DataFrame({
'Income': income,
'Credit_Score': credit_score
})
# 可视化联合分布
plt.figure(figsize=(10, 8))
sns.jointplot(data=df, x='Income', y='Credit_Score', kind='scatter',
joint_kws={'alpha': 0.5}, height=7)
plt.suptitle('收入与信用评分的联合分布', y=1.05, fontsize=16)
# 计算相关系数
correlation = df['Income'].corr(df['Credit_Score'])
print(f"收入与信用评分的Pearson相关系数: {correlation:.4f}")
定义:给定 Y = y 条件下 X 的平均值
E [ X ∣ Y = y ] = ∫ − ∞ ∞ x f X ∣ Y ( x ∣ y ) d x E[X|Y=y] = \int_{-\infty}^{\infty} x f_{X|Y}(x|y) dx E[X∣Y=y]=∫−∞∞xfX∣Y(x∣y)dx
性质:
E [ X ] = E [ E [ X ∣ Y ] ] E[X] = E[E[X|Y]] E[X]=E[E[X∣Y]] (全期望公式)
机器学习应用:条件期望是回归问题的理论最优解,即 f ( x ) = E [ Y ∣ X = x ] f(x) = E[Y|X=x] f(x)=E[Y∣X=x]
对于二维随机变量 ( X , Y ) (X, Y) (X,Y),若进行变量变换 U = g 1 ( X , Y ) , V = g 2 ( X , Y ) U = g_1(X, Y), V = g_2(X, Y) U=g1(X,Y),V=g2(X,Y),则新的随机变量 ( U , V ) (U, V) (U,V) 的分布可通过雅可比行列式计算:
f U , V ( u , v ) = f X , Y ( x , y ) ⋅ ∣ ∂ ( x , y ) ∂ ( u , v ) ∣ f_{U,V}(u,v) = f_{X,Y}(x,y) \cdot \left| \frac{\partial(x,y)}{\partial(u,v)} \right| fU,V(u,v)=fX,Y(x,y)⋅ ∂(u,v)∂(x,y)
应用场景:✨
二维随机变量的概念可自然扩展到多维随机向量 X = ( X 1 , X 2 , . . . , X n ) \mathbf{X} = (X_1, X_2, ..., X_n) X=(X1,X2,...,Xn):
# 高维数据的协方差分析与可视化
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import seaborn as sns
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
feature_names = iris.feature_names
# 计算协方差矩阵
cov_matrix = np.cov(X, rowvar=False)
# 可视化协方差矩阵
plt.figure(figsize=(10, 8))
sns.heatmap(cov_matrix, annot=True, fmt=".3f",
xticklabels=feature_names, yticklabels=feature_names,
cmap="coolwarm", cbar_kws={"label": "协方差"})
plt.title("鸢尾花数据集特征的协方差矩阵", fontsize=15)
plt.tight_layout()
# 分析特征相关性对分类性能的影响
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
import numpy as np
import matplotlib.pyplot as plt
results = []
correlations = np.linspace(-0.9, 0.9, 10)
for corr in correlations:
accuracies = []
for i in range(20): # 多次实验取平均
# 创建具有指定相关性的两个特征
X, y = make_classification(n_samples=1000, n_features=2,
n_informative=2, n_redundant=0,
n_clusters_per_class=1, random_state=i,
weights=[0.5, 0.5])
# 调整特征相关性
X[:, 1] = corr * X[:, 0] + np.sqrt(1 - corr**2) * X[:, 1]
# 拆分训练测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=i)
# 分类器训练与评估
clf = LogisticRegression()
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
accuracies.append(accuracy_score(y_test, y_pred))
results.append(np.mean(accuracies))
plt.figure(figsize=(10, 6))
plt.plot(correlations, results, 'o-', linewidth=2)
plt.axhline(y=results[len(correlations)//2], color='r', linestyle='--',
alpha=0.5, label=f'无相关性准确率: {results[len(correlations)//2]:.4f}')
plt.xlabel('特征相关系数')
plt.ylabel('分类准确率')
plt.title('特征相关性与分类性能关系')
plt.grid(True, alpha=0.3)
plt.legend()
# 实现朴素贝叶斯分类器理解条件概率的应用
from sklearn.datasets import load_wine
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import classification_report
import matplotlib.pyplot as plt
import numpy as np
# 加载葡萄酒数据集
wine = load_wine()
X = wine.data
y = wine.target
# 数据预处理
X_scaled = StandardScaler().fit_transform(X)
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)
# 训练朴素贝叶斯分类器
nb_classifier = GaussianNB()
nb_classifier.fit(X_train, y_train)
y_pred = nb_classifier.predict(X_test)
# 输出分类报告
print("朴素贝叶斯分类性能(利用条件概率):")
print(classification_report(y_test, y_pred))
# 可视化条件概率分布 (两个特征示例)
plt.figure(figsize=(12, 5))
for i, cls in enumerate(np.unique(y_train)):
plt.subplot(1, 3, i+1)
class_indices = y_train == cls
plt.scatter(X_train[class_indices, 0], X_train[class_indices, 1],
alpha=0.5, label=f'类别 {cls}')
# 计算每个类别下特征的条件均值和标准差
mean = np.mean(X_train[class_indices, :2], axis=0)
std = np.std(X_train[class_indices, :2], axis=0)
plt.title(f'类别 {cls} 的条件分布\n均值=({mean[0]:.2f}, {mean:.2f})\nσ=({std[0]:.2f}, {std:.2f})')
plt.xlabel(wine.feature_names[0])
plt.ylabel(wine.feature_names)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.suptitle('各类别下的二维特征条件分布', y=1.05, fontsize=15)
二维随机变量看似是概率论的基础概念,却是贯穿机器学习各领域的重要工具。从特征工程到模型设计,从数据分析到结果解释,二维随机变量的理论为我们提供了理解和操作高维数据的基础框架。通过掌握这些概念,你将能更深入地理解机器学习模型的工作原理,设计更有效的算法,并从数据中提取更多价值。
如果您对本文有任何疑问或建议,欢迎在评论区留言讨论!