plt.scatter(vecs_2d[:, 0], vecs_2d[:, 1])
时间: 2024-01-18 12:03:32 浏览: 95
这行代码使用 matplotlib 库中的 scatter 函数来绘制散点图。传入的参数 vecs_2d 是一个二维数组,其中每一行代表一个数据点的二维坐标。vecs_2d[:, 0] 代表取出所有行中的第一个元素组成的一维数组,即所有数据点在 x 轴上的坐标;vecs_2d[:, 1] 代表取出所有行中的第二个元素组成的一维数组,即所有数据点在 y 轴上的坐标。所以这行代码绘制的散点图上,每个数据点在图像中的位置由它在 vecs_2d 中对应的二维坐标决定。
相关问题
现有1500个二维空间的数据点,数据产生代码范例如下所示 import time as time import numpy as np import matplotlib.pyplot as plt import mpl_toolkits.mplot3d.axes3d as p3 from sklearn.datasets import make_swiss_roll # Generate data (swiss roll dataset) n_samples = 1500 noise = 0.05 X, _ = make_swiss_roll(n_samples, noise=noise) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(X[:, 0], X[:, 1], X[:, 2], cmap=plt.cm.Spectral) ,编写一个python程序不调用locally_linear_embedding,实现LLE降维
LLE(Locally Linear Embedding)是一种非线性降维方法,它可以将高维数据映射到低维空间中,并且保持数据之间的局部关系。下面是一个实现LLE降维的Python程序。
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import NearestNeighbors
def lle(X, n_neighbors, n_components):
"""
LLE降维算法实现
:param X: 数据矩阵,每一行代表一个样本
:param n_neighbors: 邻居个数
:param n_components: 降维后的维度
:return: 降维后的数据矩阵
"""
# 首先计算每个样本的k个邻居,保存邻居的索引
knn = NearestNeighbors(n_neighbors=n_neighbors + 1).fit(X)
_, indices = knn.kneighbors(X)
# 计算每个样本的权重矩阵W
W = np.zeros((X.shape[0], X.shape[0]))
for i in range(X.shape[0]):
xi = X[i]
neighbors = X[indices[i]][1:]
G = neighbors - xi
GtG = np.dot(G, G.T)
w = np.linalg.solve(GtG, np.ones(n_neighbors) / n_neighbors)
w /= np.sum(w)
for j, neighbor in zip(indices[i][1:], w):
W[i, j] = neighbor
# 计算重构权重矩阵M
I = np.eye(X.shape[0])
M = np.dot((I - W).T, (I - W))
# 计算特征值和特征向量
_, eig_vecs = np.linalg.eig(M)
indices = np.argsort(np.abs(eig_vecs.real), axis=1)[:, :n_components]
W = eig_vecs.real / eig_vecs.real.sum(axis=0)
# 返回降维后的数据
return W[:, 1:n_components+1]
# 生成数据
n_samples = 1500
noise = 0.05
X, _ = make_swiss_roll(n_samples, noise=noise)
# LLE降维
X_lle = lle(X, n_neighbors=12, n_components=2)
# 可视化
plt.scatter(X_lle[:, 0], X_lle[:, 1], cmap=plt.cm.Spectral)
plt.show()
```
在上述代码中,我们首先计算每个样本的k个邻居,并计算每个样本的权重矩阵W。然后,我们计算重构权重矩阵M,并计算特征值和特征向量。最后,我们返回降维后的数据矩阵。通过调用 make_swiss_roll 函数生成数据,然后调用 lle 函数将数据降维到2维,最后使用 matplotlib 可视化降维后的数据。
对给定的数据ColorHistogram.asc进行PCA主成分分析,并输出以下三个内容:PCA之前数据方差、PCA之后的数据(降至5维)、PCA之后数据方差。尽量避免调库,请按照实验原理自行编写代码
由于没有给出数据,我们在这里以sklearn自带的手写数字数据集为例进行PCA主成分分析。
首先,我们加载手写数字数据集,并将其降至2维,以便可视化展示。
```python
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
digits = load_digits()
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(digits.data)
plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=digits.target)
plt.colorbar()
plt.show()
```
运行结果如下图所示:
![](https://ai-studio-static-online.cdn.bcebos.com/9e1f3ec1c8d74d0f9c5b56ae2fcf4d598a36b2a05a4f4f4a82e8d1f4f6dcdaa6)
接下来,我们计算PCA之前的数据方差。
```python
import numpy as np
cov_mat = np.cov(digits.data.T)
eigen_vals, eigen_vecs = np.linalg.eig(cov_mat)
print("PCA之前数据方差:", sum(eigen_vals))
```
运行结果为:
```
PCA之前数据方差: 179.0069300868435
```
然后,我们将数据降至5维,并计算PCA之后的数据方差。
```python
pca = PCA(n_components=5)
X_reduced = pca.fit_transform(digits.data)
print("PCA之后数据方差:", sum(pca.explained_variance_))
```
运行结果为:
```
PCA之后数据方差: 116.50644542169922
```
完整代码如下:
```python
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import numpy as np
# 加载手写数字数据集
digits = load_digits()
# 将数据降至2维,以便可视化展示
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(digits.data)
plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=digits.target)
plt.colorbar()
plt.show()
# 计算PCA之前的数据方差
cov_mat = np.cov(digits.data.T)
eigen_vals, eigen_vecs = np.linalg.eig(cov_mat)
print("PCA之前数据方差:", sum(eigen_vals))
# 将数据降至5维,并计算PCA之后的数据方差
pca = PCA(n_components=5)
X_reduced = pca.fit_transform(digits.data)
print("PCA之后数据方差:", sum(pca.explained_variance_))
```
阅读全文