@icyfenix-dmla/cli 2026.5.2-7 → 2026.5.3-821
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +9 -6
- package/scripts/build.js +44 -11
- package/shared_modules/__init__.py +10 -0
- package/shared_modules/bayesian/__init__.py +6 -0
- package/shared_modules/bayesian/bayesian_network.py +105 -0
- package/shared_modules/bayesian/gaussian_mixture_model.py +141 -0
- package/shared_modules/bayesian/gaussian_mixturemodel.py +141 -0
- package/shared_modules/bayesian/multinomial_naive_bayes.py +74 -0
- package/shared_modules/bayesian/simple_bayesian_network.py +99 -0
- package/shared_modules/bayesian/simple_bayesiannetwork.py +99 -0
- package/shared_modules/cnn/__init__.py +5 -0
- package/shared_modules/cnn/alex_net.py +65 -0
- package/shared_modules/cnn/alexnet.py +65 -0
- package/shared_modules/cnn/t_e_r_m1.py +65 -0
- package/shared_modules/cnn/tiny_image_net_dataset.py +67 -0
- package/shared_modules/cnn/tiny_imagenet_dataset.py +67 -0
- package/shared_modules/cnn/tiny_imagenetdataset.py +67 -0
- package/shared_modules/cnn/tinyimagenetdataset.py +67 -0
- package/shared_modules/linear/__init__.py +6 -0
- package/shared_modules/linear/lasso_regression.py +93 -0
- package/shared_modules/linear/logistic_regression.py +78 -0
- package/shared_modules/linear/naive_bayes.py +141 -0
- package/shared_modules/linear/ridge_regression.py +58 -0
- package/shared_modules/neural/__init__.py +4 -0
- package/shared_modules/neural/perceptron.py +80 -0
- package/shared_modules/svm/__init__.py +5 -0
- package/shared_modules/svm/kernel_s_v_m.py +98 -0
- package/shared_modules/svm/kernel_svm.py +98 -0
- package/shared_modules/svm/simple_s_v_m.py +111 -0
- package/shared_modules/svm/simple_svm.py +111 -0
- package/shared_modules/tree/__init__.py +6 -0
- package/shared_modules/tree/ada_boost.py +77 -0
- package/shared_modules/tree/decision_tree_classifier.py +235 -0
- package/shared_modules/tree/decision_treeclassifier.py +235 -0
- package/shared_modules/tree/random_forest_classifier.py +88 -0
- package/shared_modules/tree/random_forestclassifier.py +88 -0
- package/shared_modules/unsupervised/__init__.py +5 -0
- package/shared_modules/unsupervised/k_means.py +127 -0
- package/shared_modules/unsupervised/kmeans.py +127 -0
- package/shared_modules/unsupervised/p_c_a.py +111 -0
- package/shared_modules/unsupervised/pca.py +111 -0
- package/src/commands/data.js +823 -0
- package/src/commands/server.js +209 -4
- package/src/index.js +23 -2
- package/src/server/routes/sandbox.js +70 -3
- package/src/server/sandbox.js +87 -11
- package/version.json +4 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# PCA 类定义
|
|
2
|
+
# 从文档自动提取生成
|
|
3
|
+
|
|
4
|
+
import numpy as np
|
|
5
|
+
|
|
6
|
+
class PCA:
|
|
7
|
+
"""
|
|
8
|
+
主成分分析(Principal Component Analysis)实现
|
|
9
|
+
|
|
10
|
+
核心步骤(对应理论推导):
|
|
11
|
+
1. 数据中心化(减去均值)
|
|
12
|
+
2. 计算协方差矩阵 S = X^T X / (n-1)
|
|
13
|
+
3. 特征分解 S = V Λ V^T
|
|
14
|
+
4. 选择前 k 个特征值对应的特征向量作为主成分
|
|
15
|
+
5. 投影到主成分空间
|
|
16
|
+
|
|
17
|
+
参数说明:
|
|
18
|
+
n_components : int, 可选
|
|
19
|
+
要保留的主成分数量。若为 None,保留所有成分
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
def __init__(self, n_components=None):
|
|
23
|
+
self.n_components = n_components
|
|
24
|
+
|
|
25
|
+
# 存储 PCA 结果
|
|
26
|
+
self.components_ = None # 主成分(特征向量矩阵)
|
|
27
|
+
self.explained_variance_ = None # 特征值(各主成分的方差)
|
|
28
|
+
self.explained_variance_ratio_ = None # 方差解释比例
|
|
29
|
+
self.mean_ = None # 数据均值向量
|
|
30
|
+
|
|
31
|
+
def fit(self, X):
|
|
32
|
+
"""
|
|
33
|
+
训练 PCA 模型
|
|
34
|
+
|
|
35
|
+
参数说明:
|
|
36
|
+
X : ndarray, shape (n_samples, n_features)
|
|
37
|
+
输入数据矩阵
|
|
38
|
+
|
|
39
|
+
返回:
|
|
40
|
+
self : PCA 对象实例
|
|
41
|
+
"""
|
|
42
|
+
n_samples, n_features = X.shape
|
|
43
|
+
|
|
44
|
+
# 步骤1:数据中心化(对应理论中的 x_i - x̄)
|
|
45
|
+
self.mean_ = X.mean(axis=0)
|
|
46
|
+
X_centered = X - self.mean_
|
|
47
|
+
|
|
48
|
+
# 步骤2:计算协方差矩阵(对应理论中的 S = 1/n Σ(x_i - x̄)(x_i - x̄)^T)
|
|
49
|
+
# 使用 n-1 而非 n,得到无偏估计(与 sklearn 一致)
|
|
50
|
+
cov_matrix = X_centered.T @ X_centered / (n_samples - 1)
|
|
51
|
+
|
|
52
|
+
# 步骤3:特征分解(对应理论中的 S = VΛV^T)
|
|
53
|
+
# np.linalg.eigh 专门用于对称矩阵,返回实数特征值
|
|
54
|
+
eigenvalues, eigenvectors = np.linalg.eigh(cov_matrix)
|
|
55
|
+
|
|
56
|
+
# 特征值和特征向量按降序排列(PCA 选择方差最大的方向)
|
|
57
|
+
indices = np.argsort(eigenvalues)[::-1]
|
|
58
|
+
eigenvalues = eigenvalues[indices]
|
|
59
|
+
eigenvectors = eigenvectors[:, indices]
|
|
60
|
+
|
|
61
|
+
# 存储特征值(对应理论中的 λ_j)
|
|
62
|
+
self.explained_variance_ = eigenvalues
|
|
63
|
+
|
|
64
|
+
# 步骤4:计算方差解释比例(对应理论中的 Σλ_j / Σλ_total)
|
|
65
|
+
total_variance = eigenvalues.sum()
|
|
66
|
+
self.explained_variance_ratio_ = eigenvalues / total_variance
|
|
67
|
+
|
|
68
|
+
# 确定主成分数量
|
|
69
|
+
if self.n_components is None:
|
|
70
|
+
self.n_components = n_features
|
|
71
|
+
|
|
72
|
+
# 步骤5:选择前 k 个主成分(对应理论中的 V_k)
|
|
73
|
+
self.components_ = eigenvectors[:, :self.n_components].T
|
|
74
|
+
|
|
75
|
+
return self
|
|
76
|
+
|
|
77
|
+
def transform(self, X):
|
|
78
|
+
"""
|
|
79
|
+
将数据投影到主成分空间
|
|
80
|
+
|
|
81
|
+
参数说明:
|
|
82
|
+
X : ndarray, shape (n_samples, n_features)
|
|
83
|
+
输入数据
|
|
84
|
+
|
|
85
|
+
返回:
|
|
86
|
+
Z : ndarray, shape (n_samples, n_components)
|
|
87
|
+
投影后的低维数据
|
|
88
|
+
"""
|
|
89
|
+
# 中心化后投影(对应理论中的 Z = X̃ V_k)
|
|
90
|
+
X_centered = X - self.mean_
|
|
91
|
+
return X_centered @ self.components_.T
|
|
92
|
+
|
|
93
|
+
def fit_transform(self, X):
|
|
94
|
+
"""训练并转换(一步完成)"""
|
|
95
|
+
self.fit(X)
|
|
96
|
+
return self.transform(X)
|
|
97
|
+
|
|
98
|
+
def inverse_transform(self, Z):
|
|
99
|
+
"""
|
|
100
|
+
从低维空间重构原始数据
|
|
101
|
+
|
|
102
|
+
参数说明:
|
|
103
|
+
Z : ndarray, shape (n_samples, n_components)
|
|
104
|
+
低维表示
|
|
105
|
+
|
|
106
|
+
返回:
|
|
107
|
+
X_reconstructed : ndarray, shape (n_samples, n_features)
|
|
108
|
+
重构的高维数据(加回均值)
|
|
109
|
+
"""
|
|
110
|
+
# 重构公式(对应理论中的 X̂ = Z V_k^T + x̄)
|
|
111
|
+
return Z @ self.components_ + self.mean_
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# PCA 类定义
|
|
2
|
+
# 从文档自动提取生成
|
|
3
|
+
|
|
4
|
+
import numpy as np
|
|
5
|
+
|
|
6
|
+
class PCA:
|
|
7
|
+
"""
|
|
8
|
+
主成分分析(Principal Component Analysis)实现
|
|
9
|
+
|
|
10
|
+
核心步骤(对应理论推导):
|
|
11
|
+
1. 数据中心化(减去均值)
|
|
12
|
+
2. 计算协方差矩阵 S = X^T X / (n-1)
|
|
13
|
+
3. 特征分解 S = V Λ V^T
|
|
14
|
+
4. 选择前 k 个特征值对应的特征向量作为主成分
|
|
15
|
+
5. 投影到主成分空间
|
|
16
|
+
|
|
17
|
+
参数说明:
|
|
18
|
+
n_components : int, 可选
|
|
19
|
+
要保留的主成分数量。若为 None,保留所有成分
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
def __init__(self, n_components=None):
|
|
23
|
+
self.n_components = n_components
|
|
24
|
+
|
|
25
|
+
# 存储 PCA 结果
|
|
26
|
+
self.components_ = None # 主成分(特征向量矩阵)
|
|
27
|
+
self.explained_variance_ = None # 特征值(各主成分的方差)
|
|
28
|
+
self.explained_variance_ratio_ = None # 方差解释比例
|
|
29
|
+
self.mean_ = None # 数据均值向量
|
|
30
|
+
|
|
31
|
+
def fit(self, X):
|
|
32
|
+
"""
|
|
33
|
+
训练 PCA 模型
|
|
34
|
+
|
|
35
|
+
参数说明:
|
|
36
|
+
X : ndarray, shape (n_samples, n_features)
|
|
37
|
+
输入数据矩阵
|
|
38
|
+
|
|
39
|
+
返回:
|
|
40
|
+
self : PCA 对象实例
|
|
41
|
+
"""
|
|
42
|
+
n_samples, n_features = X.shape
|
|
43
|
+
|
|
44
|
+
# 步骤1:数据中心化(对应理论中的 x_i - x̄)
|
|
45
|
+
self.mean_ = X.mean(axis=0)
|
|
46
|
+
X_centered = X - self.mean_
|
|
47
|
+
|
|
48
|
+
# 步骤2:计算协方差矩阵(对应理论中的 S = 1/n Σ(x_i - x̄)(x_i - x̄)^T)
|
|
49
|
+
# 使用 n-1 而非 n,得到无偏估计(与 sklearn 一致)
|
|
50
|
+
cov_matrix = X_centered.T @ X_centered / (n_samples - 1)
|
|
51
|
+
|
|
52
|
+
# 步骤3:特征分解(对应理论中的 S = VΛV^T)
|
|
53
|
+
# np.linalg.eigh 专门用于对称矩阵,返回实数特征值
|
|
54
|
+
eigenvalues, eigenvectors = np.linalg.eigh(cov_matrix)
|
|
55
|
+
|
|
56
|
+
# 特征值和特征向量按降序排列(PCA 选择方差最大的方向)
|
|
57
|
+
indices = np.argsort(eigenvalues)[::-1]
|
|
58
|
+
eigenvalues = eigenvalues[indices]
|
|
59
|
+
eigenvectors = eigenvectors[:, indices]
|
|
60
|
+
|
|
61
|
+
# 存储特征值(对应理论中的 λ_j)
|
|
62
|
+
self.explained_variance_ = eigenvalues
|
|
63
|
+
|
|
64
|
+
# 步骤4:计算方差解释比例(对应理论中的 Σλ_j / Σλ_total)
|
|
65
|
+
total_variance = eigenvalues.sum()
|
|
66
|
+
self.explained_variance_ratio_ = eigenvalues / total_variance
|
|
67
|
+
|
|
68
|
+
# 确定主成分数量
|
|
69
|
+
if self.n_components is None:
|
|
70
|
+
self.n_components = n_features
|
|
71
|
+
|
|
72
|
+
# 步骤5:选择前 k 个主成分(对应理论中的 V_k)
|
|
73
|
+
self.components_ = eigenvectors[:, :self.n_components].T
|
|
74
|
+
|
|
75
|
+
return self
|
|
76
|
+
|
|
77
|
+
def transform(self, X):
|
|
78
|
+
"""
|
|
79
|
+
将数据投影到主成分空间
|
|
80
|
+
|
|
81
|
+
参数说明:
|
|
82
|
+
X : ndarray, shape (n_samples, n_features)
|
|
83
|
+
输入数据
|
|
84
|
+
|
|
85
|
+
返回:
|
|
86
|
+
Z : ndarray, shape (n_samples, n_components)
|
|
87
|
+
投影后的低维数据
|
|
88
|
+
"""
|
|
89
|
+
# 中心化后投影(对应理论中的 Z = X̃ V_k)
|
|
90
|
+
X_centered = X - self.mean_
|
|
91
|
+
return X_centered @ self.components_.T
|
|
92
|
+
|
|
93
|
+
def fit_transform(self, X):
|
|
94
|
+
"""训练并转换(一步完成)"""
|
|
95
|
+
self.fit(X)
|
|
96
|
+
return self.transform(X)
|
|
97
|
+
|
|
98
|
+
def inverse_transform(self, Z):
|
|
99
|
+
"""
|
|
100
|
+
从低维空间重构原始数据
|
|
101
|
+
|
|
102
|
+
参数说明:
|
|
103
|
+
Z : ndarray, shape (n_samples, n_components)
|
|
104
|
+
低维表示
|
|
105
|
+
|
|
106
|
+
返回:
|
|
107
|
+
X_reconstructed : ndarray, shape (n_samples, n_features)
|
|
108
|
+
重构的高维数据(加回均值)
|
|
109
|
+
"""
|
|
110
|
+
# 重构公式(对应理论中的 X̂ = Z V_k^T + x̄)
|
|
111
|
+
return Z @ self.components_ + self.mean_
|