Python 如何使用Scikit-Learn生成对称正定矩阵
Python的Scikit-learn库提供了make_spd_matrix()函数,可以使用它来生成随机的对称正定矩阵。在本教程中,我们将使用Python的Scikit-learn(Sklearn)生成对称正定矩阵和稀疏正定矩阵。
要做到这一点,我们可以按照以下步骤进行:
第 1 步 - 导入所需的库: sklearn.datasets.make_spd_matrix, matplotlib 和seaborn。
第 2 步 – 创建 make_spd_matrix() 的对象,并提供n_dim参数的值,表示矩阵的维度。
第 3 步 – 使用matplotlib库设置输出图形的大小。
第 4 步 – 使用seaborn库将矩阵绘制为彩色编码图。
示例
# Importing libraries
from sklearn.datasets import make_spd_matrix
from matplotlib import pyplot as plt
from matplotlib import style
import seaborn as sns
# Set the figure size
plt.rcParams["figure.figsize"] = [7.16, 3.50]
plt.rcParams["figure.autolayout"] = True
plt.show()
# Creating and plotting Sparse Positive-Definite matrix of dimension 4
style.use("ggplot")
spd = make_spd_matrix(n_dim=4, random_state=1)
sns.heatmap(data=spd, annot=True, cmap='rocket')
plt.show()
输出
它将产生以下输出
示例
检查上述生成的稀疏正定矩阵的值 –
import pandas as pd
from sklearn.datasets import make_spd_matrix
spd = make_spd_matrix(n_dim=4, random_state=1)
print(pd.DataFrame(spd))
输出
它将产生以下的输出
0 1 2 3
0 1.214261 -1.693503 0.092278 -0.167397
1 -1.693503 3.331807 -0.230052 0.424357
2 0.092278 -0.230052 0.381256 0.119570
3 -0.167397 0.424357 0.119570 0.387159
生成稀疏spd矩阵
Python Scikit-learn提供了make_sparse_spd_matrix()函数,可以帮助我们生成稀疏的对称正定(spd)矩阵。
要生成并在三维中绘制它,我们可以按照以下步骤进行:
步骤 1 - 导入必要的库sklearn.datasets.make_sparse_spd_matrix()和matplotlib。
步骤 2 - 提供样本数量和其他参数。
步骤 3 - 使用NumPy创建一个随机数组。该数组的元素数量应与我们在 sklearn.datasets.make_sparse_spd_matrix()函数中提供的一样。
步骤 4 - 使用matplotlib库设置输出图形的大小和样式。
步骤 5 - 使用matplotlib构建一个三维图形来说明稀疏spd矩阵。
示例
在下面的示例中,我们将生成具有500个样本的稀疏spd矩阵。
# Importing libraries
from sklearn.datasets import make_sparse_spd_matrix
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.style
import matplotlib as mpl
mpl.style.use('classic')
from mpl_toolkits.mplot3d import Axes3D
# Creating Sparse spd matrix
X= make_sparse_spd_matrix(dim=500, random_state=0)
#Creating a random array 'y'(it's not sparse)
from numpy import random
y=random.randint(2, size=(500))
# Plotting the sparse spd matrix in 3-dimensional
figure_3D = plt.figure(figsize=(7.50,3.50))
plt.subplots_adjust(bottom=0.05, top=0.9, left=0.05, right=0.95)
ax = figure_3D.add_subplot(111, projection='3d')
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=y, cmap=plt.cm.rainbow)
plt.title('Sparse spd matrix')
plt.show()
输出
将会产生以下输出: