【发布时间】:2020-05-13 02:27:15
【问题描述】:
我有一组 4 个主要组件(参见下面的 pc1:pc2),我将它们用作输入变量来预测我的 y 变量(下面的 y-var)。我尝试使用 SVM 使用 pc1 和 pc2 预测 y-var,如下所示:
from sklearn.decomposition import PCA
from mlxtend.plotting import plot_decision_regions
from mlxtend.plotting import plot_decision_regions
from sklearn.svm import SVC
df = x_var[['pc1','pc2']].join(y_var["y-var"])
clf = SVC(C=1,gamma=0.0001)
X_train = np.array(df[['pc1', 'pc2']])
y_train = np.array(df["y-var"])
clf.fit(X_train, y_train)
plot_decision_regions((X_train), (y_train), clf=clf, legend=2)
这给了我:
显然,SVM 将所有内容归类为“一个”(您在图片中看不到决策边界)。为什么我没有得到 1 和 0 的分类?我还尝试了不同的内核并进行了网格搜索,但结果始终相同。
pc1 pc2 y-var
0 0.519179 0.247208 1
1 0.271661 0.378146 1
2 0.160372 0.395769 1
3 0.131858 0.377220 0
4 -0.082872 0.099886 1
5 -0.018304 0.125293 1
6 -0.075480 0.129186 1
7 -0.120394 0.103077 1
8 -0.079285 0.315473 0
9 -0.061470 0.373005 1
10 -0.114704 0.318144 0
11 -0.036623 0.402758 0
12 -0.266696 0.102101 1
13 -0.304520 -0.044354 1
14 -0.341065 -0.091845 1
15 -0.335393 -0.158577 1
16 -0.294246 -0.172631 1
17 -0.112002 0.107467 0
18 -0.008648 0.039244 0
19 -0.016432 -0.011859 1
20 0.025505 -0.003516 0
21 0.065414 -0.144414 0
22 0.058254 -0.199284 1
23 0.080844 -0.227434 1
24 0.146013 -0.177407 0
25 0.072719 -0.215493 1
26 0.076515 -0.218327 1
27 0.073930 -0.205280 0
28 0.084932 -0.213145 1
29 0.127504 -0.119456 1
30 0.410069 -0.070637 0
31 0.444208 -0.054756 0
32 0.359892 -0.039921 1
33 0.351449 0.039005 1
34 0.340579 -0.061595 1
35 0.195910 -0.088828 1
36 0.169974 0.014353 1
37 0.168284 -0.034547 0
38 0.163418 0.009783 1
39 0.222996 -0.020889 0
40 0.131592 0.197540 1
41 0.035192 0.160503 1
42 -0.005788 0.010568 1
43 -0.146251 -0.078299 0
44 -0.165629 -0.054383 1
45 -0.157875 -0.065957 0
46 -0.144255 -0.038511 1
47 -0.115826 -0.080849 0
48 -0.145774 -0.064944 1
49 -0.218346 -0.008935 1
50 -0.154941 -0.066568 0
51 -0.173926 -0.109107 0
52 -0.191553 -0.059816 1
53 -0.209128 -0.118813 1
【问题讨论】:
-
类的分布非常相似(即,到处都是 0,周围很少有 1),而 1 的密度更高。在这种情况下,这个预测是有道理的。您可以尝试进行完整性检查并生成线性可分数据集来检查模型。
标签: python machine-learning scikit-learn classification svm