当前位置: 首页> 游戏> 单机 > 互联网网站运营_小程序app公众号的区别_代运营一般收费_搜狗收录批量查询

互联网网站运营_小程序app公众号的区别_代运营一般收费_搜狗收录批量查询

时间:2025/8/12 2:26:48来源:https://blog.csdn.net/weixin_64110589/article/details/146549550 浏览次数:0次
互联网网站运营_小程序app公众号的区别_代运营一般收费_搜狗收录批量查询

一、贝叶斯原理

二、概率密度函数值 

三、协方差计算 

四、设计思路 

4.1、散点输入

import numpy as np
x1= np.array([[1.9,1.2],[1.5,2.1],[1.9,0.5],[1.5,0.9],[0.9,1.2],[1.1,1.7],[1.4,1.1]])
x2=np.array([[3.2,3.2],[3.7,2.9],[3.2,2.6],[1.7,3.3],[3.4,2.6],[4.1,2.3],[3.0,2.9]])
#合并数据创造标签
X=np.concatenate((x1,x2))
y=np.concatenate((np.zeros(len(x1)),np.ones(len(x2))))

4.2、先验概率

prior_probabilities=[np.sum(y==0)/len(y),np.sum(y==1)/len(y)]

4.3、条件概率

def pdf(x,mean,cov):n=len(mean)x1=1/((2*np.pi)**(n/2))*(np.sqrt(np.linalg.det(cov)))y1=-0.5*np.dot(np.dot((x-mean).T,np.linalg.inv(cov)),(x-mean))return x1*np.exp(y1)

4.4、后验概率

posterior_probabilities=prior_probabilities[i]*likelinhood

4.5、决策边界

4.6、完整代码

import numpy as np  
import matplotlib.pyplot as plt  # 1. 散点输入  
x1 = np.array([[1.9, 1.2],  [1.5, 2.1],  [1.9, 0.5],  [1.5, 0.9],  [0.9, 1.2],  [1.1, 1.7],  [1.4, 1.1]])  x2 = np.array([[3.2, 3.2],  [3.7, 2.9],  [3.2, 2.6],  [1.7, 3.3],  [3.4, 2.6],  [4.1, 2.3],  [3.0, 2.9]])  # 合并数据集、创造标签  
X = np.concatenate((x1, x2))  # 将两个类别的数据点合并为一个数据集  
y = np.concatenate((np.zeros(len(x1)), np.ones(len(x2))))  # 创建标签:类别1为0,类别2为1  # 2. 计算先验概率(每个类别的数据在数据集中的比例)  
prior_probabilities = [np.sum(y == 0) / len(y), np.sum(y == 1) / len(y)]  
print(prior_probabilities)  # 输出每个类别的先验概率  # 3. 计算高斯分布的概率密度函数  
# 求解每个类别的均值  
class_means = [np.mean(X[y == 0], axis=0), np.mean(X[y == 1], axis=0)]  
# print(class_means)  # 输出每个类别的均值  # 求解每个类别的协方差矩阵  
X_y_0 = X[y == 0].T  # 类别0的数据点转置  
X_y_1 = X[y == 1].T  # 类别1的数据点转置  
class_covs = [np.cov(X_y_0), np.cov(X_y_1)]  # 计算每个类别的协方差矩阵  # 生成网格点,用于绘制决策边界  
xx, yy = np.meshgrid(np.arange(0, 5, 0.05), np.arange(0, 4, 0.05))  
# 预测网格点  
grid_points = np.c_[xx.ravel(), yy.ravel()]  # 将网格点展平并合并为二维点  def pdf(x, mean, cov):  # 获取均值向量的长度,即特征的数量  n = len(mean)  # 计算PDF的系数部分  coeff = 1 / ((2 * np.pi) ** (n / 2) * np.sqrt(np.linalg.det(cov)))  # 计算归一化常数  # 计算PDF的指数部分  exponet = -0.5 * np.dot(np.dot((x - mean).T, np.linalg.inv(cov)), (x - mean))  # 计算指数部分  return coeff * np.exp(exponet)  # 返回概率密度  grid_label = []  # 保存每个网格点的预测标签  
# 每一组网格点进行预测  
for point in grid_points:  posterior_probabilities = []  # 存储后验概率  for i in range(2):  # 使用高斯分布的概率密度函数求解条件概率  likelihood = pdf(point, class_means[i], class_covs[i])  # 计算似然  # 4. 得到后验概率,比较大小,获得分类  posterior_probabilities.append(prior_probabilities[i] * likelihood)  # 计算后验概率  # 比较大小,获得分类  pre_class = np.argmax(posterior_probabilities)  # 选择具有最大后验概率的类  grid_label.append(pre_class)  # 保存预测标签  # 5. 显示决策边界  
# 将预测的标签形状调整为与xx一致  
grid_label = np.array(grid_label).reshape(xx.shape)  # 重塑预测标签为与网格点一致的形状  # 绘制散点图  
plt.scatter(x1[:, 0], x1[:, 1], c="blue", label="class 1")  # 类别1的散点图  
plt.scatter(x2[:, 0], x2[:, 1], c="red", label="class 2")   # 类别2的散点图  contour = plt.contour(xx, yy, grid_label, levels=[0.5], colors="green")  # 绘制决策边界  plt.legend()  # 添加图例  
plt.show()  # 显示图表  

五、多分类

import numpy as np  
import matplotlib.pyplot as plt  # 1. 散点输入  
x1 = np.array([[1.9, 1.2],  [1.5, 2.1],  [1.9, 0.5],  [1.5, 0.9],  [0.9, 1.2],  [1.1, 1.7],  [1.4, 1.1]])  x2 = np.array([[3.2, 3.2],  [3.7, 2.9],  [3.2, 2.6],  [1.7, 3.3],  [3.4, 2.6],  [4.1, 2.3],  [3.0, 2.9]])  x3 = np.array([[3.3, 1.2],  [3.8, 0.9],  [3.3, 0.6],  [2.8, 1.3],  [3.5, 0.6],  [4.2, 0.3],  [3.1, 0.9]])  # 合并数据集、创造标签  
X = np.concatenate((x1, x2, x3))  # 将三个类别的数据点合并为一个数据集  
# 创建标签:类别1为0,类别2为1,类别3为2  
y = np.concatenate((np.zeros(len(x1)), np.ones(len(x2)), 2 * np.ones(len(x3))))  # 2. 计算先验概率(每个类别的数据在数据集中的比例)  
prior_probabilities = [np.sum(y == 0) / len(y), np.sum(y == 1) / len(y), np.sum(y == 2) / len(y)]  # 3. 计算高斯分布的概率密度函数  
# 求解每个类别的均值  
class_mean = [np.mean(X[y == 0], axis=0), np.mean(X[y == 1], axis=0), np.mean(X[y == 2], axis=0)]  # 求解每个类别的协方差矩阵  
X_y_0 = X[y == 0].T  # 类别0的数据点转置  
X_y_1 = X[y == 1].T  # 类别1的数据点转置  
X_y_2 = X[y == 2].T  # 类别2的数据点转置  
class_covs = [np.cov(X_y_0), np.cov(X_y_1), np.cov(X_y_2)]  # 计算每个类别的协方差矩阵  # 生成网格点,用于绘制决策边界  
xx, yy = np.meshgrid(np.arange(0, 5, 0.05), np.arange(0, 4, 0.05))  
# 预测网格点  
grid_points = np.c_[xx.ravel(), yy.ravel()]  # 将网格点展平并合并为二维点  def pdf(x, mean, cov):  # 获取均值向量的长度,即特征的数量  n = len(mean)  # 计算PDF的系数部分  coeff = 1 / ((2 * np.pi) ** (n / 2) * np.sqrt(np.linalg.det(cov)))  # 计算归一化常数  # 计算PDF的指数部分  exponet = -0.5 * np.dot(np.dot((x - mean).T, np.linalg.inv(cov)), (x - mean))  # 计算指数部分  return coeff * np.exp(exponet)  # 返回概率密度  grid_label = []  # 保存每个网格点的预测标签  
# 每一组网格点进行预测  
for point in grid_points:  posterior_probabilities = []  # 存储后验概率  for i in range(3):  # 遍历每个类别  # 使用高斯分布的概率密度函数求解条件概率  likelihood = pdf(point, class_mean[i], class_covs[i])  # 计算似然  # 4. 得到后验概率,比较大小,获得分类  posterior_probabilities.append(pr

六、库函数

6.1、concatenate()

        用于将多个数组连接在一起,通常在合并不同类别的数据时使用。

numpy.concatenate((a1, a2, ...), axis=0, out=None)  
方法描述
a1, a2, ...要连接的数组序列,可以是任意数量的数组。
axis(可选)指定沿着哪个轴连接,默认值为 0。
out(可选)与返回值相同形状的输出数组。
import numpy as np  x1 = np.array([[1, 2], [3, 4]])  
x2 = np.array([[5, 6], [7, 8]])  
result = np.concatenate((x1, x2), axis=0)  
# 输出:[[1 2]  
#        [3 4]  
#        [5 6]  
#        [7 8]]  

6.2、cov()

        用于计算每个特征的协方差矩阵,常用于概率分布分析和数据的分散程度。

numpy.cov(m, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None)  
方法描述
m输入数据,可以是一个二维数组或矩阵。
rowvar(可选)如果为 True(默认值),每一行代表一个变量,每一列代表一个观察结果。
bias(可选)如果为 True,计算的是总体协方差矩阵;如果为 False,计算的是样本协方差矩阵。
ddof(可选)用于设置自由度调整。
fweights,aweights(可选)用于加权相关分析。
import numpy as np  data = np.array([[1, 2], [3, 4], [5, 6]])  
cov_matrix = np.cov(data, rowvar=False)  
# 输出:[[2. 2.]  
#        [2. 2.]]  

6.3、meshgrid()

        用于生成网格点,通常用于绘制二维图形,如决策边界。

numpy.meshgrid(*xi, indexing='xy', sparse=False)  
方法描述
*xi一维数组,表示网格点的坐标。
indexing(可选)选择 'xy' 或 'ij' 来指定输出数组的排列顺序。
sparse(可选)如果为 True,则只返回稀疏网格。
import numpy as np  x = np.arange(0, 5, 1)  
y = np.arange(0, 3, 1)  
xx, yy = np.meshgrid(x, y)  
# xx: [[0, 1, 2, 3, 4],  
#      [0, 1, 2, 3, 4],  
#      [0, 1, 2, 3, 4]]  
# yy: [[0, 0, 0, 0, 0],  
#      [1, 1, 1, 1, 1],  
#      [2, 2, 2, 2, 2]]  

6.4、c_()

        将网格点展平并合并为二维点  

numpy.c_[*args]  
方法描述
*args可以是多个一维数组、列表或其他可以转换为数组的对象。
import numpy as np  x = np.array([1, 2, 3])  
y = np.array([4, 5, 6])  
result = np.c_[x, y]  
# 输出:[[1 4]  

6.5、np.linalg.det()

        用于计算方阵的行列式,行列式可以提供矩阵的一些性质,例如,它可以用来判断矩阵是否可逆(如果行列式为零,则矩阵不可逆)。

numpy.linalg.det(a)  
方法描述
a要计算行列式的方阵(二维数组)。
import numpy as np  # 定义一个方阵  
matrix = np.array([[1, 2],   [3, 4]])  determinant = np.linalg.det(matrix)  # 计算行列式  
print(determinant)  # 输出:-2.0  

6.6、np.linalg.inv()

        用于计算方阵的逆。逆矩阵是线性代数中的重要概念,能够用于求解线性方程组和其他涉及矩阵的操作。

numpy.linalg.inv(a)  
方法描述
a要计算其逆的方阵(二维数组)。
import numpy as np  # 定义一个方阵  
matrix = np.array([[1, 2],   [3, 4]])  inverse_matrix = np.linalg.inv(matrix)  # 计算矩阵的逆  
print(inverse_matrix)  
# 输出:  
# [[-2.   1. ]  
#  [ 1.5 -0.5]]  

6.7、plt.contour()

        用于绘制二元函数的等高线图,通常用于数据可视化,展示函数在空间中的分布情况和趋势。在决策边界的可视化中,也经常使用该函数来显示不同类的分界线。

matplotlib.pyplot.contour(X, Y, Z, levels=None, **kwargs)  
方法描述
x用于绘制等高线的 x 坐标数组。
y用于绘制等高线的 y 坐标数组。
z用于绘制等高线的对应的 z 值,它必须与 X 和 Y 相同形状的数组。
levels(可选)指定绘制的等高线级别,可以是一个标量(表示绘制一定数量的水平线)或一个数组(表示特定的高度)。
**kwargs其他绘图属性,如颜色、线型等。
import numpy as np  
import matplotlib.pyplot as plt  # 创建网格数据  
x = np.linspace(-3, 3, 100)  
y = np.linspace(-3, 3, 100)  
X, Y = np.meshgrid(x, y)  
Z = np.sin(np.sqrt(X**2 + Y**2))  # 计算 z 值  plt.contour(X, Y, Z)  # 绘制等高线  
plt.title("Contour Plot")  
plt.xlabel("X-axis")  
plt.ylabel("Y-axis")  
plt.colorbar()  # 添加颜色条  
plt.show()  

关键字:互联网网站运营_小程序app公众号的区别_代运营一般收费_搜狗收录批量查询

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: