3

knn.cvFNN パッケージのR のデータセットで k 最近傍アルゴリズム (相互検証あり) を使用しているときに問題が発生しました。データ セットは、58 の属性を持つ 4601 の電子メール ケースで構成されます。57 の属性は の文字または単語の頻度に依存しemails(numerical, range [0,100])、最後の属性はスパム (値 1) かハム (値 0) かを示します。

train 変数と cl 変数を指定し、10 個のネイバーを使用した後、パッケージを実行すると7.4032、各列のような値を持つすべてのメールのリストが表示されますが、これは使用方法がわかりません。パッケージが分類するスパムとハムのパーセンテージを見つけて、正しいパーセンテージと比較する必要があります。これらの結果をどのように解釈すればよいですか?

4

1 に答える 1

4

あなたが説明したデータセットが、同じタイトルの有名な本に付属するElemStatLearnパッケージのスパムデータセットと (正確に) 一致することを考えると、これが実際に宿題であるかどうか疑問に思っています。その場合は問題ありませんが、質問に宿題タグを追加する必要があります。

ここにいくつかの指針があります。

関数のドキュメントにはknn.cv、分類のベクトルを、k 個の最近傍の距離とインデックスと共に「属性」として返すと記載されています。だから私はこれを実行すると:

out <- knn.cv(spam[,-58],spam[,58],k = 10)

オブジェクトoutは次のようになります。

> head(out)
[1] spam  spam  spam  spam  spam  email
Levels: email spam

参照する他の値は、属性として一種の「非表示」ですが、次を使用してそこにあることがわかりますstr

> str(out)
 Factor w/ 2 levels "email","spam": 2 2 2 2 2 1 1 1 2 2 ...
 - attr(*, "nn.index")= int [1:4601, 1:10] 446 1449 500 5 4 4338 2550 4383 1470 53 ...
 - attr(*, "nn.dist")= num [1:4601, 1:10] 8.10e-01 2.89 1.50e+02 2.83e-03 2.83e-03 ...

これらの追加の属性には、次のような方法でアクセスできます。

nn.index <- attr(out,'nn.index')
nn.dist <- attr(out,'nn.dist')

これらのオブジェクトは両方とも最終的に 4601 x 10 の次元の行列になることに注意してください。これは、ドキュメンテーションによると、k = 10最近傍のインデックス (行番号) とそれぞれの距離が記録されているためです。

table()最後のビットについては、関数と同様に便利であることがわかるでしょうprop.table()

于 2012-05-05T20:12:02.340 に答える