- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Julia notebook 中实现内核主成分分析(内核 PCA)的方法。更具体地说,我试图复制本教程中完成的过程:https://sebastianraschka.com/Articles/2014_kernel_pca.html#References
但是教程是用 python 编写的,因此我在 Julia 中复制该方法时遇到了问题。
这是我目前在 Julia 中的代码
using LinearAlgebra, CSV, Plots, DataFrames
function sq_norm(X, rows, cols)
# X should be MxN matrix, and it will do the square norm between all N-dim vectors
# rows is the number of rows (INT)
# cols is the number of columns
result = zeros(rows, rows)
for i in 1:rows
for j in 1:rows
sum = 0.0
for k in 1:cols
sum = (X[i, k] - X[j, k])^2
end
# print("this is the sum at i: ")
# print(i)
# print(" and j: ")
# print(j)
# print(" sum: ")
# print(sum)
# print("\n")
result[i, j] = sum
end
end
return result
end
function kernel_mat_maker(gamma, data, rows)
#data must be a square symmetric matrix
result = zeros(rows, rows)
for i in 1:rows
for j in 1:rows
result[i, j] = exp( (-gamma) * data[i, j])
end
end
return result
end
function center_k(K, rows)
one_N = ones(rows, rows)
one_N = (1/rows) * one_N
return K - one_N*K - K*one_N + one_N*K*one_N
end
function data_splitter(data, filter, key)
# data should be Nx2 matrix
# filter will be a Nx1 matrix composed of 1's and 0's
# sum = 0
# siz = size(filter)
# for i in 1:100
# sum += filter[i]
# end
output1 = DataFrame(A = 1:50, B = 0)
output2 = DataFrame(A = 1:50, B = 0)
print("everything fine where expected\n")
for i in 1:size(data, 1)
if filter[i] == 1
output1 = data[i, :]
print("saved to output1 fine\n")
end
end
return output1
end
# data1 = CSV.read("C:\\Users\\JP-27\\Desktop\\X1data.csv", header=false)
# data2 = CSV.read("C:\\Users\\JP-27\\Desktop\\X2data.csv", header=false)
data = CSV.read("C:\\Users\\JP-27\\Desktop\\data.csv", header=true)
gdf = groupby(data, :a)
plot(gdf[1].x, gdf[1].y, seriestype=:scatter, legend=nothing)
plot!(gdf[2].x, gdf[2].y, seriestype=:scatter)
# select(data, 2:3)
# filter = select(data, :1)
newData = select(data, 2:3)
# print("this is newData:\n")
# print(newData)
# print("\n")
nddf = DataFrame(newData)
# print("this is nddf:\n")
# print(nddf)
# print("\n")
# CSV.write("C:\\Users\\JP-27\\Desktop\\ju_data_preprocessing.csv", nddf)
step1 = sq_norm(data, 100, 2)
# df1 = DataFrame(step1)
# CSV.write("C:\\Users\\JP-27\\Desktop\\ju_sq_dists.csv", df1)
step2 = kernel_mat_maker(15,step1,100)
# df2 = DataFrame(step2)
# CSV.write("C:\\Users\\JP-27\\Desktop\\ju_mat_sq_dists.csv", df2)
step3 = center_k(step2, 100)
# df3 = DataFrame(step3)
# CSV.write("C:\\Users\\JP-27\\Desktop\\juliaK.csv", df3)
e_vals = eigvals(step3)
e_vcts = eigvecs(step3)
e_vcts = real(e_vcts)
# print("this is e_vcts\n")
# print(e_vcts)
# print("\n")
# e_vects = DataFrame(e_vcts)
# CSV.write("C:\\Users\\JP-27\\Desktop\\juliaE_vcts.csv", e_vects)
result = DataFrame(e_vcts[:, 99:100])
# step11 = sq_norm(data1, 50, 2)
# step12 = kernel_mat_maker(15,step11,50)
# step13 = center_k(step12, 50)
# step21 = sq_norm(data2, 50, 2)
# step22 = kernel_mat_maker(15,step21,50)
# step23 = center_k(step22, 50)
# vals1 = eigvals(step13)
# vals2 = eigvals(step23)
# evects1 = eigvecs(step13)
# evects2 = eigvecs(step23)
# evects1 = real(evects1)
# evects2 = real(evects2)
# dataevect1 = DataFrame(evects1[:, 49:50])
# dataevect2 = DataFrame(evects2[:, 49:50])
#now we extract the last two columns of our two processed 50x50 matrices
# plot(dataevect1[1], dataevect1[2], seriestype = :scatter, title = "My Scatter Plot")
# plot!(dataevect2[1], dataevect2[2], seriestype = :scatter, title = "My Scatter Plot")
最佳答案
供您引用,内核 PCA 方法在 MultivariateStats ( https://multivariatestatsjl.readthedocs.io/en/stable/kpca.html ) 中实现。
如果您对细节感兴趣,这里是一个从头开始的实现:
https://github.com/Alexander-Barth/MachineLearningNotebooks/blob/master/kernel-pca.ipynb
关于julia - Julia 中的内核 PCA 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61663876/
我尝试用 PCA 构建一个定向边界框。在图片中您可以看到我的结果: 红点:点云 蓝色向量:PCA 分量 我尝试将点投影到向量上,以获得最小值、最大值和平均值。 但是我现在如何定义我的盒子呢?有什么想法
我们如何将 PCA 应用于一维数组? double[][] data = new double [1][600]; PCA pca = new PCA(data, 20); data = pca.ge
我知道PCA和ICA都用于降维,并且在PCA中主成分是正交的(不一定独立),但在ICA中它们是独立的。有人能澄清一下什么时候使用 ICA 而不是 PCA 更好吗? 最佳答案 ICA 不是一种降维技术。
我正在使用 scikit-learning 做一些降维任务。 我的训练/测试数据采用 libsvm 格式。它是一个有 50 万列的大型稀疏矩阵。 我使用 load_svmlight_file 函数加载
我一直在尝试使用 PCA 进行降维。我目前有一个大小为 (100, 100) 的图像,我正在使用一个由 140 个 Gabor 滤波器组成的滤波器组,其中每个滤波器都会给我一个响应,这又是一个 (10
我使用以下简单代码在具有 10 个特征的数据框上运行 PCA: pca = PCA() fit = pca.fit(dfPca) pca.explained_variance_ratio_ 的结果显示
我正在使用 scikit-learn PCA查找具有大约 20000 个特征和 400 多个样本的数据集的主要成分。 但是,与Orange3 PCA相比应该使用 scikit-learn PCA,我得
Sklearn PCA 是 pca.components_ 的 loadings?我很确定是这样,但我正在尝试遵循一篇研究论文,但我从他们的加载中得到了不同的结果。我在 sklearn 文档中找不到它
我有一个包含 50 多个变量的数据框 data,我正在尝试使用 caret 包在 R 中执行 PCA。 library(caret) library(e1071) trans <- preProces
我正在使用 PCA 来降低 N 维数据集的维数,但我想增强对大异常值的稳健性,因此我一直在研究 Robust PCA 代码。 对于传统的 PCA,我使用的是 python 的 sklearn.deco
我正在降低 Spark DataFrame 的维度与 PCA带有 pyspark 的模型(使用 spark ml 库)如下: pca = PCA(k=3, inputCol="features", o
我在 matlab 和 python 中生成相同的矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13
概述 主成分分析(Principal Component Analysis,PCA)是一种常用的数据降维和特征提取技术,用于将高维数据转换为低维的特征空间。其目标是通过线性变换将原始特征转化为
目录 计算过程 投影分量计算 假设你有一家理发店,已经记录了过去一年中所有顾客的头发长度和发型偏好的数据。现在你想从这些数据中提取一些主要的信息,比如顾客最常
我正在考虑使用 PCA(TruncatedSVD) 来减少我的稀疏矩阵的维数。 我将我的数据拆分为训练和测试拆分。 X_train , X_test, y_train, y_test = train_
我有来自四个群体、四个处理和三个重复的个体数据集。每个个体仅在一个群体、处理和重复组合中。我对每个人进行了四次测量。我想对每个种群、底物和重复组合的这些测量进行 PCA。 我知道如何对所有个体进行 P
在考虑均值时,数字 1 和 2 背后的直觉是什么?这将如何影响性能和准确性? 1号: pca = decomposition.PCA(n_components=4) X_centere
我正在使用来自 here 的输入数据(见第 3.1 节)。 我正在尝试使用 scikit-learn 重现它们的协方差矩阵、特征值和特征向量。但是,我无法重现数据源中显示的结果。我也在别处看到过这个输
我要做的事情如下:我有一套 Vektors v1-vn对于这些,我需要协方差矩阵(我在做 pca 时得到的)。我还需要协方差矩阵的特征值和特征向量。我按降序对特征值进行排序,然后根据相应的特征值对特征
给定 http://docs.opencv.org/modules/core/doc/operations_on_arrays.html PCA 应该可以通过传递一个矩阵来初始化。 cv::Mat m
我是一名优秀的程序员,十分优秀!