6

機械学習の問題があり、理論的な解決策があるかどうかわかりません。

データにラベルを付けて (データセットD1と呼びましょう)、ランダム フォレスト分類モデルを構築しましたが、うまく機能します。

今、私の主な関心は、このモデルをラベルがゼロの別のデータセットD2に適用することです。つまり、トレーニングには使用できません。D2でパフォーマンスを測定する唯一の方法は、D2 から予測されるクラスの割合を確認することです。

問題: D2はD1と比較して歪んでいます (特徴の平均が同じでないか、同じ分布に適合していません)。このため、 D2に適用されたモデルは、1 つのクラスに大きく偏った結果をもたらします。D2の大部分はD1の小さなサブセットに似ているため、これが正常であることはわかっています。

しかし、そのゆがみを修正する方法はありますか? 私の問題の性質から、予測されたクラスの割合はあまり偏っていないはずです。正規化を試みましたが、実際には役に立ちません。

私はまっすぐに考えていないと感じます:3

4

2 に答える 2

6

興味をそそる質問。これに対する私の答えは 3 つの部分に分かれています。

免責事項:無料のランチはありません。したがって、実際のテスト セット ラベルでパフォーマンスを確認せずに、確実に確認することはできません。最悪の場合、問題にコンセプトのドリフトがあり、ターゲット クラスを予測できなくなります。ただし、かなり良い結果をもたらすソリューションがあります

表記について:

X特徴は、ターゲット変数 によって示されY、分類子は によって学習されf(X) |-> Yます。byの分布(少し表記を乱用X)D1P(X|D1)

テストセットでのクラス分布

あなたは「予測変数の分布を使用できると仮定しました (「そこから予測されるクラスの割合を確認してください」)。ただし、これは単なる指標にすぎません。私は、機械が故障することを予測するために業界で分類器を構築しています (多くのエンジニアが私の入力データを歪めようとしています.これはデータを生成するマシンの信頼性を高めています.しかし,これは問題ではありません.1つのクラスは基本的に消えます.しかし,分類器はまだ有効です. .

テストセットのターゲットラベルの分布を「修正する方法」という質問には、非常に簡単な方法があります。アイデアは、基本的に、予測されたラベルに従ってすべてのテスト インスタンスを分類し、目的のターゲット変数分布に従ってデータ ポイントを (置換して) サンプリングすることです。次に、機能の分布を確認しようとすることができますXが、これではあまりわかりません。

歪みが問題になることはありますか? 実際、分類器は通常、測定値またはその他の統計的特性を最小化しようとするため、accuracy可能F1です。の分布が事前にわかっている場合は、D2この分布でのコストを最小化するコスト関数を提供できます。これらのコストは、他の回答で述べたように、トレーニング データのリサンプリングに使用できますが、一部の学習アルゴリズムには、この情報を組み込むためのより精巧な手法もあります。

外れ値の検出

1 つの問題は、入力で何かが変更されたことを検出できるかどうかですX。これは、間違ったデータを持っていることを示している可能性があるため、非常に重要です。たとえば、すべての次元の平均や分布など、かなり単純なテストを適用できます。ただし、これは変数間の依存関係を無視します。

次の 2 つの図では、アイリス データセットを使用しています。 ここに画像の説明を入力

データ内の何かが変更されたことを検出できる 2 つの手法が頭に浮かびます。最初の手法は、PCA 変換に依存しています。数値のみですが、カテゴリ機能にも同様のアイデアがあります。PCA を使用すると、入力データを低次元空間に変換できます。これは 通常、この変換ではまだ可逆であり、エラーが小さいPCA(X,t)=PCA([X1,...,Xn],t)=[Cond1,...,Condm]=Cond投影です。問題を検出するために、このエラーを監視できます。エラーが増加すると、予測を信用できないと言えます。tn<<mPCA^1(Cond,t) = X'MSE(X,X')

versicolorおよびからのすべてのデータに PCA を作成し、virginica2 次元の再構成でエラーをプロットすると (すべての虹彩次元の PCA)、次のようになります。

ここに画像の説明を入力

ただし、versicolor が新しいデータである場合、結果は説得力に欠けます。

ここに画像の説明を入力

ただし、PCA (または同様のもの) は数値データに対して行われるため、オーバーヘッドをあまりかけずに適切な指示を与えることができます。

私が知っている 2 番目の手法は、いわゆるワン クラス サポート ベクター マシンに基づくものです。通常のサポート ベクター マシンは、2 つのターゲット クラスを分離しようとする分類器を構築しますY。1 クラスのサポート ベクター マシンは、見えるデータと見えないデータを分離しようとします。分類にサポート ベクター マシンを使用する場合、この手法を使用することは非常に魅力的です。基本的に 2 つの分類が得られます。最初のものは対象データを言い、2番目のものは以前に同様のデータが見られたかどうかを言います。

1 クラスの分類器を構築し、目新しさsetosavirginca色を付けると、次のグラフが得られます。

ここに画像の説明を入力

ご覧のとおり、からのデータversicolorは疑わしいと思われます。その場合、それは新しいクラスです。ただし、これらがvirginicaのインスタンスであると仮定すると、超平面の近くで危険なほど漂流している.

半教師あり学習とトランスダクティブ

あなたの根本的な問題を解決するために。半教師あり学習の特殊なケースであるトランスダクティブ ラーニングのアイデアは、興味深いかもしれません。半監督学習では、トレーニング セットは 2 つの部分で構成されます。ラベル付きデータとラベルなしデータ。Semi-sup-l は、このすべてのデータを使用して分類器を構築します。トランスダクティブ ラーニングは、ラベル付けされていないデータがテスト データである特殊なケースD2です。D2Vapnik は、「より単純な問題 [ラベルの予測]を解決したいときに、より複雑な問題 [考えられるすべてのデータの分類器を構築する] を解決しようとしないでください」という考え方を示しました。

付録

プロットの RCODE

ggplot(iris)+aes(x=Petal.Width,y=Petal.Length,color=Species)+geom_point()+stat_ellipse()
library(e1071)
iris[iris$Species %in% c("virginica","setosa"),]

ocl <- svm(iris[iris$Species %in% c("virginica","setosa"),3:4],type="one-classification")
coloring <- predict(ocl,iris[,3:4],decision.values=TRUE)

ggplot(iris)+aes(x=Petal.Width,y=Petal.Length,color=coloring)+geom_point()+stat_ellipse()
ggplot(iris)+aes(x=Petal.Width,y=Petal.Length)+geom_point(color=rgb(red=0.8+0.1*attr(coloring,"decision.values"),green=rep(0,150),blue=1-(0.8+0.1*attr(coloring,"decision.values"))))

pca <- prcomp(iris[,3:4])

#pca <- prcomp(iris[iris$Species %in% c("virginica","setosa"),1:4], retx = TRUE,  scale = TRUE)
pca <- prcomp(iris[iris$Species %in% c("virginica","setosa"),1:4], retx = TRUE,  scale = TRUE,tol=0.2)
  pca <- prcomp(iris[iris$Species %in% c("virginica","versicolor"),1:4], retx = TRUE,  scale = TRUE,tol=0.4)
  predicted <-predict(pca,iris[,1:4])
  inverted <- t(t(predicted %*% t(pca$rotation)) * pca$scale + pca$center)
  ggplot(inverted[,3:4]-iris[,3:4])+aes(x=Petal.Width,y=Petal.Length,color=iris$
                                    Species)+geom_point()+stat_ellipse()
于 2016-01-08T10:48:43.267 に答える
2

この歪んだ結果につながる可能性のある多くの要因が考えられます。

D1 と比較して D2 が歪んでいることを示しているようです。したがって、大きく歪んだ結果が予想される結果になる可能性があります (おそらく、D2 データセットは、1 つのクラスが支配的な問題空間の地域部分に重点を置いています)。データの性質によっては、これが有効な結果になる可能性があります。

おそらく、D1 は特定のクラスでオーバートレーニングされています。クラス内のより少ないケースでトレーニングを試みて、結果を判断するために他のクラスの 1 つに分類するように促すことができます。トレーニング ケースまたはテスト ケースの数はわかりませんが、サイズが大きく、トレーニング データに他のクラス ラベルよりも多くのクラス ラベルがある場合、おそらく過分類につながる可能性があります。

おそらく、トレーニング データを操作して D2 の手段に近づけ、それが分類に与える影響を確認することもできます。私は前にこれを試したことはありません。

これが何らかの形で役立つことを願っています。

于 2016-01-07T22:54:29.490 に答える