0

4000 個の特徴と 35 個のサンプルを含むデータセットがあります。すべての機能は 1 ~ 3 の浮動小数点数です。例: 2.68244527684596。

このデータで分類子を機能させるのに苦労しています。knn、svm (linear、rbf、poly) を使用しました。それから私はノーマライゼーションについて学びました。それでも、私にとっては少し複雑で、このコードを機能させて適切な予測を行うことができません。

データを正規化するために使用しているコードは次のとおりです。

train_data = preprocessing.scale(train_data)
train_data = preprocessing.normalize(train_data,'l1',0)

分類しようとしているコードは次のとおりです。

# SVM with poly
svc1 = svm.SVC(kernel='poly',degree=3)
svc1.fit(train_data[:-5], train_labels[:-5])
print "Poly SVM: ",svc1.predict(train_data[-5:])

# SVM with rbf
svc2 = svm.SVC(kernel='rbf')
svc2.fit(train_data[:-5], train_labels[:-5])
print "RBF SVM: ",svc2.predict(train_data[-5:])

#SVM with linear
svc3 = svm.SVC(kernel='linear')
svc3.fit(train_data[:-5], train_labels[:-5])
print "Linear SVM: ",svc3.predict(train_data[-5:])


# KNN
knn = KNeighborsClassifier()
knn.fit(train_data[:-5], train_labels[:-5])
print "KNN :", knn.predict(train_data[-5:])

# Linear regression
logistic = linear_model.LogisticRegression()
print('LogisticRegression score: %f' % logistic.fit(train_data[5:], train_labels[5:]).score(train_data[0:4], train_labels[0:4]))

私は機械学習の初心者で、すべての概念についてもっと学ぶために一生懸命働いています。誰かが私を正しい方向に向けるかもしれないと思った。

注:サンプルは 35 個しかありません。これは課題の一部です。これ以上データを取得できません:(

4

1 に答える 1

2

データが何らかの意味で具体的でない場合、標準化preprocessing.scaleはうまくいくはずです。各次元の平均が 0 で標準偏差が 1 になるように強制するため、多かれ少なかれ、中心が 0 のボールでデータを取り込もうとします。を使用しないでくださいnormalize。正規化すると、各サンプルに単位ノルムが強制されます。データによって正当化される必要があります(ポイントを球上に配置するように強制するため)。めったにありません。

分類子が機能しない理由は多数ある可能性があります。特に - それはあなたのテストコードですか?もしそうなら:

  • 5 つのサンプルだけでテストするのではなく、交差検証 (scikit-learn で利用可能) について学び、少なくとも 3 倍の CV を実行する必要があります。
  • さまざまなハイパーパラメータを学習してテストします。SVM は、少なくともそれらのうちの 1 つを必要とします (使用するカーネルに応じて、通常は 1 から 4 - RBF カーネルの場合はその C とガンマ、ポリ C の場合、度数、coef0 など)。KNN 約 3 (k、メトリック、重み); 少なくとも 1 のロジスティック回帰 (正則化)
  • 分類子を作成する前に、データを見てください。平面 (PCA) にプロットし、各フィーチャの投影をプロットしてみてください。データの特徴は何ですか? バランスが取れていますか?
  • 最も重要なのは、より多くのデータを収集することです! 4000次元空間に35ポイントがあります...何かをするのにサンプル数がとてつもなく少ないです...少なくとも10倍(できれば100倍)以上のポイントを取得できない場合は、データの次元をに減らすことから始めますほとんどの30次元...次元削減を使用します(scikit-learn PCAでも)。
于 2015-11-10T20:06:26.520 に答える