在Matlab中执行SVM训练后,如何可视化SVM分类?
到目前为止,我只训练过SVM:
% Labels are -1 or 1
groundTruth = Ytrain;
d = xtrain;
model = svmtrain(groundTruth, d);
Run Code Online (Sandbox Code Playgroud) 我正在使用R软件(R commander)来聚类我的数据.我有一个较小的数据子集,包含200行和大约800列.尝试kmeans集群并在图表上绘图时,我收到以下错误."'princomp'只能用于比变量更多的单位"
然后我创建了一个10行和10列的测试文档,但是当我添加一个额外的列时,我再次遇到错误.为什么是这样?我需要能够绘制我的集群.当我在执行kmeans后查看我的数据集时,我可以看到额外的结果列,其中显示了它们属于哪些群集.
有什么我做错了,我可以摆脱这个错误并绘制我的大样本??? 请帮忙,现在已经破坏了我的头一个星期.多谢你们.
我正在尝试使用prcomp和绘制主成分分析ggbiplot.我正在获取单位圆外的数据值,并且在调用之前无法重新调整数据prcomp,我可以将数据约束到单位圆.
data(wine)
require(ggbiplot)
wine.pca=prcomp(wine[,1:3],scale.=TRUE)
ggbiplot(wine.pca,obs.scale = 1,
var.scale=1,groups=wine.class,ellipse=TRUE,circle=TRUE)
Run Code Online (Sandbox Code Playgroud)
我在调用之前通过减去平均值并除以标准偏差来尝试缩放prcomp:
wine2=wine[,1:3]
mean=apply(wine2,2,mean)
sd=apply(wine2,2,mean)
for(i in 1:ncol(wine2)){
wine2[,i]=(wine2[,i]-mean[i])/sd[i]
}
wine2.pca=prcomp(wine2,scale.=TRUE)
ggbiplot(wine2.pca,obs.scale=1,
var.scale=1,groups=wine.class,ellipse=TRUE,circle=TRUE)
Run Code Online (Sandbox Code Playgroud)
ggbiplot 包安装如下:
require(devtools)
install_github('ggbiplot','vqv')
Run Code Online (Sandbox Code Playgroud)
输出任一代码块:

根据@Brian Hanson在下面的评论,我正在添加一个反映我想要获得的输出的附加图像.

这应该是非常基本的,我希望有人可以帮助我.我通过以下调用运行了主成分分析:
pca <- princomp(....)
summary(pca)
Run Code Online (Sandbox Code Playgroud)
摘要pca返回此描述:
PC1 PC2 PC3
Standard deviation 2.8788 2.7862 2.1845
Proportion of Variance 0.1977 0.1549 0.07831
Run Code Online (Sandbox Code Playgroud)
查看显示每台PC解释的差异的第二行.如何从变量pca以编程方式从我的脚本中提取此向量.我做了足够的搜索,找不到答案.
我试图获得需要用于分类的组件数量.我已经阅读了类似的问题使用scikit-learn PCA和关于此的scikit文档查找具有最高方差的维度:
但是,这仍然没有解决我的问题.我的所有PCA组件都非常大,因为我可以选择所有这些组件,但如果我这样做,PCA将毫无用处.
我还在scikit中阅读了PCA库 http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html 它表明了L:
如果n_components =='mle',如果0 <n_components <1,则使用Minka的MLE猜测维度,选择组件数量,使得需要解释的方差量大于n_components指定的百分比
但是,我无法找到有关使用此技术分析PCA的n_components的更多信息
这是我的PCA分析代码:
from sklearn.decomposition import PCA
pca = PCA()
pca.fit(x_array_train)
print(pca.explained_variance_)
Run Code Online (Sandbox Code Playgroud)
结果:
[ 6.58902714e+50 6.23266555e+49 2.93568652e+49 2.25418736e+49
1.10063872e+49 3.25107359e+40 4.72113817e+39 1.40411862e+39
4.03270198e+38 1.60662882e+38 3.20028861e+28 2.35570241e+27
1.54944915e+27 8.05181151e+24 1.42231553e+24 5.05155955e+23
2.90909468e+23 2.60339206e+23 1.95672973e+23 1.22987336e+23
9.67133111e+22 7.07208772e+22 4.49067983e+22 3.57882593e+22
3.03546737e+22 2.38077950e+22 2.18424235e+22 1.79048845e+22
1.50871735e+22 1.35571453e+22 1.26605081e+22 1.04851395e+22
8.88191944e+21 6.91581346e+21 5.43786989e+21 5.05544020e+21
4.33110823e+21 3.18309135e+21 3.06169368e+21 2.66513522e+21
2.57173046e+21 2.36482212e+21 2.32203521e+21 2.06033130e+21
1.89039408e+21 1.51882514e+21 1.29284842e+21 1.26103770e+21
1.22012185e+21 1.07857244e+21 8.55143095e+20 4.82321416e+20 …Run Code Online (Sandbox Code Playgroud) 假设有一个矩阵B,其大小为a 500*1000 double(这里,500代表观察1000的数量并代表特征的数量).
sigma是协方差矩阵B,D是一个对角矩阵,其对角元素是特征值sigma.假设A是协方差矩阵的特征向量sigma.
我有以下问题:
我需要选择k = 800对应于具有最大幅度的特征值的第一个特征向量来对所选特征进行排序.最终的矩阵命名Aq.我怎样才能在MATLAB中做到这一点?
这些选定的特征向量是什么意思?
看来最终的矩阵的大小Aq是1000*800 double有一次我计算Aq.时间点/观察信息500已经消失.对于最终的矩阵Aq,什么是价值1000矩阵Aq现在代表什么呢?此外,800矩阵中的值Aq现在代表什么?
我正在尝试使用mca包在Python中进行多个对应分析.
我对如何使用它感到有点困惑.随着PCA我希望到适合一些数据(即找到这些数据主要成分),再后来我就能够使用,我发现主成分变换看不见的数据.
根据MCA文档,我无法确定如何执行此最后一步.我也搞不懂什么任何的古怪cryptically命名的属性和方法做(即.E,.L,.K,.k等).
到目前为止,如果我有一个包含字符串的列的DataFrame(假设这是DF中唯一的列)我会做类似的事情
import mca
ca = mca.MCA(pd.get_dummies(df, drop_first=True))
Run Code Online (Sandbox Code Playgroud)
从我可以收集到的
ca.fs_r(1)
Run Code Online (Sandbox Code Playgroud)
是在数据的变换df和
ca.L
Run Code Online (Sandbox Code Playgroud)
应该是特征值(虽然我得到的1s 的向量比我的特征数量少一个元素?).
现在,如果我有更多具有相同功能的数据,让我们说df_new并假设我已经正确地将其转换为虚拟变量,我如何找到ca.fs_r(1)新数据的等价物
我一直在努力对fviz_pca来自 R 包的函数内的输出图中的默认点形状进行更改FactoExtra。
该图以我想要自定义的点形状的特定顺序*出现。
*对应的形状分别为16、17、15、12、0、8
fviz_pca_biplot(PCA, axes = c(1, 2),
label="var", col.var = "black", #setas
geom = "point", pointsize = 2, col.ind=PCADF$groups,
addEllipses = TRUE, ellipse.level = 0.95,
ellipse.type ="confidence", palette = "aaas") + theme_minimal()
Run Code Online (Sandbox Code Playgroud)
我尝试添加到函数中:
geom_point(aes(shape = c(19,20,21,22,23,24)))
Run Code Online (Sandbox Code Playgroud)
它向我返回了一条错误消息:
geom[1] 中的错误:“环境”类型的对象不是可子集的
在函数 fviz_pca 中管理和自定义点形状的任何建议?
在Python中,我正在研究旅行保险欺诈检测的二进制分类问题。这是我的数据集的特征:
指标是精度,召回率和F2得分。我们将重点更多地放在避免误报上,因此,我们非常赞赏召回率很高。作为预处理,我使用SMOTE-NC对肯定的案例进行了超采样,这也考虑了分类变量。
在尝试了包括自我训练的半监督学习和标签传播/标签传播等方法之后,我获得了较高的回忆得分(培训中80%,测试中65-70%)。但是,我的精度得分显示出过拟合的痕迹(训练时为60-70%,测试时为10%)。我知道精度在训练上是好的,因为它是重新采样的,而测试数据则很低,因为它直接反映了测试数据中类的不平衡。但是这个精度分数太低了,所以我想解决它。
因此,为了简化模型,我正在考虑应用降维。我找到了一个名为princeFAMD 的软件包 (混合物数据的因子分析)。
问题1:我应该如何进行标准化,FAMD,k倍交叉验证和重采样?我下面的方法正确吗?
问题2:包prince不具有的方法,例如fit或transform等中Sklearn,所以无法执行第三步骤如下所述。任何其他包好做fit,并transform为FAMD?还有没有其他好的方法可以减少此类数据集的维数?
我的方法:
*对于我对这个问题的整体处理方法的各种建议,我也将不胜感激
谢谢!
classification resampling pca factor-analysis cross-validation
pca ×10
r ×4
matlab ×2
scikit-learn ×2
ggbiplot ×1
ggplot2 ×1
ggpubr ×1
java ×1
k-means ×1
libsvm ×1
pandas ×1
princomp ×1
python-3.x ×1
r-commander ×1
resampling ×1
svm ×1
variance ×1