社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【机器学习】机器学习中25个最重要的数学定义(公式、代码实现)

机器学习初学者 • 3 周前 • 56 次点击  
这些数学定义构成了数据科学/机器学习/深度学习的重要基础,从优化算法到概率分布,从特征工程到模型评估,它们在数据科学的各个环节都发挥着关键作用。理解和掌握这些定义,对于深入学习和应用数据科学技术至关重要。

1. 梯度下降(Gradient Descent)

公式

讲解

梯度下降是一种优化算法,用于最小化损失函数。其中, 是第 次迭代的参数, 是学习率, 是损失函数 处的梯度。它通过不断沿着梯度的反方向更新参数,来逐步接近损失函数的最小值。

代码实现(Python)

import numpy as np

# 假设的损失函数
def loss_function(theta):
    return theta**2

# 损失函数的梯度
def gradient(theta):
    return 2 * theta

theta = 5  # 初始参数
learning_rate = 0.1
epochs = 100

for _ in range(epochs):
    theta = theta - learning_rate * gradient(theta)

print("最终参数:", theta)

2. 正态分布(Normal distribution)

公式

讲解

正态分布是一种常见的概率分布, 是均值, 是方差。它的概率密度函数呈钟形曲线,许多自然现象和数据都近似服从正态分布。

代码实现(Python)

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

mu = 0
sigma = 1
x = np.linspace(mu - 3*sigma, mu + 3*sigma, 100)
plt.plot(x, norm.pdf(x, mu, sigma))
plt.show()

3. Z - 分数(Z - score)

公式

讲解

Z - 分数用于标准化数据,它表示一个数据点 距离均值 有多少个标准差 。通过Z - 分数变换,可以将不同尺度的数据转换到同一尺度,便于比较和分析。

代码实现(Python)

import numpy as np

data = np.array([12345])
mean = np.mean(data)
std = np.std(data)
z_scores = (data - mean) / std
print("Z - 分数:", z_scores)

4. Sigmoid 函数

公式

讲解

Sigmoid 函数常用于将实数映射到 (0, 1) 区间,常作为神经网络中的激活函数。它将输入值压缩到一个概率值范围内,特别适用于二分类问题。

代码实现(Python)

import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

x = np.linspace(-55100)
plt.plot(x, sigmoid(x))
plt.show()

5. 相关性(Correlation)

公式

讲解

相关性用于衡量两个变量 之间的线性相关程度。 是协方差, 分别是 的标准差。相关性系数的取值范围是 [-1, 1],-1 表示完全负相关,1 表示完全正相关,0 表示无线性相关。

代码实现(Python)

import numpy as np

x = np.array([12345])
y = np.array([54321])
corr = np.corrcoef(x, y)[01]
print("相关性系数:", corr)

6. 余弦相似度(Cosine Similarity)

公式

讲解

余弦相似度用于衡量两个向量 的夹角余弦值,从而判断它们的相似程度。它常用于文本相似度计算等领域,不考虑向量的长度,只关注向量的方向。

代码实现(Python)

import numpy as np

a = np.array([123])
b = np.array([456])
cosine_sim = np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
print("余弦相似度:", cosine_sim)

7. 朴素贝叶斯(Naive Bayes)

公式

讲解

朴素贝叶斯是一种基于贝叶斯定理的分类算法,假设特征之间相互独立。它通过计算给定特征下类别的后验概率,来进行分类预测。

代码实现(Python)

from sklearn.naive_bayes import GaussianNB
import numpy as np

# 假设的训练数据
X = np.array([[-1-1], [-2-1], [-3-2], [11], [21], [32]])
y = np.array([111222])

clf = GaussianNB()
clf.fit(X, y)
print("预测:", clf.predict([[-0.8-1]]))

8. 最大似然估计(MLE - Maximum Likelihood Estimation)

公式

讲解

最大似然估计是一种参数估计方法,通过找到使观测数据出现概率最大的参数值 来估计模型参数。它假设数据是独立同分布的。

代码实现(Python)

import numpy as np
from scipy.stats import norm

# 假设的数据来自正态分布
data = np.random.normal(52100)

# 估计均值和标准差
mu_hat = np.mean(data)
sigma_hat = np.std(data)
print("估计的均值:", mu_hat)
print("估计的标准差:", sigma_hat)

9. 普通最小二乘法(OLS - Ordinary Least Squares)

公式

讲解

普通最小二乘法用于线性回归,通过最小化观测值 与预测值 之间的误差平方和,来估计回归系数 是特征矩阵, 是目标变量。

代码实现(Python)

import numpy as np
import statsmodels.api as sm

# 假设的特征和目标变量
X = np.array([[11], [12], [13]])
y = np.array([246])

# 添加常数项
X = sm.add_constant(X)

model = sm.OLS(y, X).fit()
print("回归系数:", model.params)

10. F1 - 分数(F1 Score)

公式

讲解

F1 - 分数是一种用于衡量分类模型性能的指标,它综合了精确率 和召回率 。精确率是预测为正例中实际为正例的比例,召回率是实际正例中被预测为正例的比例。F1 - 分数越高,说明模型在正例识别上的综合性能越好。

代码实现(Python)

from sklearn.metrics import f1_score

y_true = [0110]
y_pred = [0100]
print("F1 - 分数:", f1_score(y_true, y_pred))

11. 修正线性单元(ReLU - Rectified Linear Unit)

公式

讲解

ReLU 是一种常用的神经网络激活函数,它将所有负输入值置为 0,正输入值保持不变。它解决了梯度消失问题,并且计算效率高。

代码实现(Python)

import numpy as np
import matplotlib.pyplot as plt

def relu(x):
    return np.maximum(0, x)

x = np.linspace(-55100)
plt.plot(x, relu(x))
plt.show()

12. Softmax 函数

公式

讲解

Softmax 函数常用于多分类问题,将输入向量转换为概率分布,使得所有类别的概率之和为 1。它输出每个类别的概率,便于进行分类决策。

代码实现(Python)

import numpy as np

def softmax(x):
    exp_x = np.exp(x - np.max(x))
    return exp_x / np.sum(exp_x)

x = np.array([123])
print("Softmax 输出:", softmax(x))

13. R2 - 分数(R2 score)

公式

讲解

R2 - 分数用于评估回归模型的拟合优度,取值范围是 [0, 1]。1 表示模型完全拟合数据,0 表示模型与数据的均值预测效果相同。

代码实现(Python)

from sklearn.metrics import r2_score

y_true = [3-0.527]
y_pred = [2.50.028]
print("R2 - 分数:", r2_score(y_true, y_pred))

14. 均方误差(MSE - Mean Squared Error)

公式

讲解

均方误差是一种常用的回归模型损失函数,它计算预测值 与真实值 之间误差的平方的平均值,衡量了模型预测值与真实值的平均偏离程度。

代码实现(Python)

from sklearn.metrics import mean_squared_error

y_true = [12.53]
y_pred = [1.22.42.9]
print("均方误差:", mean_squared_error(y_true, y_pred))

15. 均方误差 + L2 正则化(MSE + L2 Reg)

公式

讲解

在均方误差的基础上加入 L2 正则化项, 是正则化参数, 是模型参数。L2 正则化通过惩罚较大的参数值,防止模型过拟合。

代码实现(Python)

from sklearn.linear_model import Ridge

# 假设的特征和目标变量
X = np.array([[11], [12], [13]])
y = np.array([246])

model = Ridge(alpha = 1.0)
model.fit(X, y)
print("正则化后的系数:", model.coef_)

16. 特征向量(Eigen vectors)

公式

讲解

对于一个方阵 ,如果存在非零向量 和标量 满足上述公式,那么 就是 的特征向量, 是对应的特征值。特征向量和特征值在主成分分析(PCA)等降维技术中有重要应用。

代码实现(Python)

import numpy as np

A = np.array([[21], [12]])
eigen_values, eigen_vectors = np.linalg.eig(A)
print("特征值:", eigen_values)
print("特征向量:", eigen_vectors)

17. 熵(Entropy)

公式

讲解

熵是信息论中的一个概念,用于衡量随机变量的不确定性。 是事件 发生的概率,熵越大,说明不确定性越高。

代码实现(Python)

import numpy as np

probabilities = np.array([0.20.30.5])
entropy = -np.sum([p * np.log2(p) for p in probabilities if p > 0])
print("熵:", entropy)

18. K - 均值聚类(KMeans)

公式

讲解

K - 均值聚类是一种无监督学习算法,将数据集划分为 个簇。它通过不断更新簇中心 ,使得每个数据点到其所属簇中心的距离平方和最小。

代码实现(Python)

from sklearn.cluster import KMeans
import numpy as np

# 假设的数据
X = np.array([[12], [14], [10], [42], [44], [40]])
kmeans = KMeans(n_clusters = 2, random_state = 0).fit(X)
print("聚类标签:", kmeans.labels_)

19. KL 散度(KL Divergence)

公式

讲解

KL 散度用于衡量两个概率分布 之间的差异。它是非对称的,即

代码实现(Python)

import numpy as np

p = np.array([0.250.250.250.25])
q = np.array([0.10.20.30.4])
kl_divergence = np.sum([p_i * np.log(p_i / q_i) for p_i, q_i in zip(p, q) if p_i > 0 and q_i > 0])
print("KL 散度:", kl_divergence)

20. 对数损失(Log - loss)

公式

讲解

对数损失常用于分类问题,衡量预测概率 与真实标签 之间的差异。它对错误预测给予较大的惩罚。

代码实现(Python)

from sklearn.metrics import log_loss

y_true = [01]
y_pred = [[0.90.1], [0.10.9]]
print("对数损失:", log_loss(y_true, y_pred))

21. 支持向量机(SVM - Support Vector Machine)

公式

讲解

SVM 是一种分类和回归模型,通过寻找一个最优超平面来最大化样本点到超平面的间隔。 是超平面的法向量, 是偏置, 是惩罚参数。

代码实现(Python)

from sklearn import svm
import numpy as np

# 假设的训练数据
X = np.array([[00], [11]])
y = np.array([01])
clf = svm.SVC()
clf.fit(X, y)

22. 线性回归(Linear regression)

公式

讲解

线性回归是一种基本的监督学习算法,用于建立自变量 与因变量 之间的线性关系。其中, 是截距, 是回归系数, 是误差项,通常假定其服从均值为 0 的正态分布。通过最小化预测值与真实值之间的误差(如均方误差),可以估计出回归系数的值。

代码实现(Python)

import numpy as np
import matplotlib.pyplot as plt

# 生成一些随机数据
np.random.seed(0)
x = np.random.rand(1001)
y = 2 + 3 * x + np.random.randn(1001)

# 添加截距项
X = np.hstack((np.ones((1001)), x))

# 计算回归系数
beta = np.linalg.inv(X.T @ X) @ X.T @ y

# 预测
y_pred = X @ beta

# 绘制图形
plt.scatter(x, y)
plt.plot(x, y_pred, 'r')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

23. 奇异值分解(SVD - Singular Value Decomposition)

公式

讲解

对于任意的 矩阵 ,奇异值分解将其分解为三个矩阵的乘积。其中, 的正交矩阵,其列向量称为左奇异向量; 的对角矩阵,对角线上的元素称为奇异值,通常按从大到小排列; 的正交矩阵,其列向量称为右奇异向量。SVD 在数据降维、图像压缩、推荐系统等领域有广泛应用。

代码实现(Python)

import numpy as np

A = np.array([[12], [34]])
U, s, Vt = np.linalg.svd(A)
Sigma = np.zeros(A.shape)
Sigma[:min(A.shape[0], A.shape[1]), :min(A.shape[0], A.shape[1])] = np.diag(s)
print("U:", U)
print("Sigma:", Sigma)
print("Vt:", Vt)

24. 拉格朗日乘数(Lagrange multiplier)

公式

讲解

拉格朗日乘数法是一种用于求解在等式约束条件下函数极值的方法。给定目标函数 和约束条件 ,通过引入拉格朗日乘数 构建拉格朗日函数 。然后,对 分别关于 求偏导数,并令偏导数等于 0,求解得到的方程组,即可得到在约束条件下目标函数的极值点。

代码实现(Python,以一个简单的例子说明)

from scipy.optimize import minimize

# 目标函数
def f(x):
    return x[0] ** 2 + x[1] ** 2

# 约束条件
def constraint(x):
    return x[0] + x[1] - 1

# 初始猜测值
x0 = np.array([00])

# 求解
solution = minimize(f, x0, constraints={'type''eq''fun': constraint})
print("最优解:", solution.x)
print("最优值:", solution.fun)

25. 可补充的重要数学定义(示例:交叉熵 - Cross - Entropy)

公式

讲解

交叉熵用于衡量两个概率分布 之间的差异,在机器学习中常用于分类问题的损失函数。当 是真实分布, 是预测分布时,交叉熵越小,表示预测分布与真实分布越接近。

代码实现(Python)

import numpy as np

p = np.array([0.20.30.5])
q = np.array([0.10.40.5])
cross_entropy = -np.sum([p_i * np.log(q_i) for p_i, q_i in zip(p, q) if p_i > 0 and q_i > 0])
print("交叉熵:", cross_entropy)


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/178838
 
56 次点击