Rで次元削減を行う方法


28

私は、a(i、j)が個々のiがページjを閲覧した回数を教えてくれるマトリックスを持っています。27Kの個人と95Kのページがあります。一緒に表示されることが多いページのセットに対応するページのスペースに、いくつかの「ディメンション」または「アスペクト」を持ちたいと思います。私の最終的な目標は、次元1、次元2などに該当するページを個人がどれだけ頻繁に閲覧したかを計算できるようにすることです。

主成分分析単一値分解に関するRのドキュメントを読んで、これらのコマンドを実行しましたが、どのように進めたらよいかわかりません。

次元削減を使用してこれを行うにはどうすればよいですか?または、これは本当にクラスタリングの問題であり、代わりにクラスタリングアルゴリズムを調べる必要がありますか?

洞察力に感謝します〜l

回答:


10

mat_pages []には列(クラスタリングする)のページと行の個人が含まれていると仮定しましょう。次のコマンドを使用して、Rbyの個々のデータに基づいてページをクラスター化できます。

  pc <- prcomp(x=mat_pages,center=TRUE,scale=TRUE)

負荷行列は、データのSVD分解の固有ベクトルの行列です。スコアの計算で各ページの相対的な重みを示します。絶対値が大きい負荷ほど、対応する主成分のスコアを決定する際に影響が大きくなります。

しかし、私はまた、指摘すべきくるショートをクラスタページにPCAを使用します。この理由は、この変動が実際にPAGEコンテンツまたはその他の理由(技術的または個別の変動である可能性がある)であるかどうかに関係なく、負荷が大きい変動でPAGESに大きな重みを与えるためです。負荷は、必ずしもグループ間の真の違いを反映しているわけではありません。しかし、このクラスタリングは、すべてのページに同じ分散があるという仮定の下でのグループの違いを本当に反映しています(これが有効な仮定かどうかはわかりません)。

強力なコンピューティング機能がある場合(データサイズを考慮すると可能かもしれません)-階層モデルを使用することをお勧めします。Rでは、lme4パッケージを使用して実行できます。


スコアを取得したらどうしますか?

これは大まかな提案であり、分析はデータがどのように見えるかに大きく依存します。また、あなたが持っている大きさのデータをグループ化するには、このプロセスは非常に実行不可能だと思います。

pc.col <- paste("page", 1:27000, sep=".")

pdf("principle-components.pdf")
plot(pc$x[,1:2]) ## Just look at the 1st two loadings (as you can see the groupings in a plane)
dev.off()

うまくいけば、これによってデータがどのようにグループ化されているかを把握できます。

警告:これは私が推奨するものではありません。


私の推薦:

このような問題はゲノミクスで頻繁に発生します。あなたの場合、ページは遺伝子に対応し、個人は患者に対応します(基本的に個人はゲノミクスと同じ意味を持ちます)

データに基づいてページをクラスター化します。

Rでは多くのクラスタリングパッケージを使用でき、他の回答でも指摘されています。パッケージの基本的な問題は、hclustのようにクラスターの数を決定する方法です。私のお気に入りのいくつかは次のとおりです。

  • pvclust(クラスターを提供し、各クラスターのp値も提供します。p値を使用すると、統計的に有意なクラスターを判別できます。問題:多くの計算能力が必要であり、サイズ)
  • hopach(クラスターの推定数とクラスターを示します)
  • Bioconductorには他にもパッケージがあります。タスクビューで確認してください。

また、k-meansなどのクラスタリングアルゴリズムを使用することもできます。このフォーラムでクラスタリングに関するスレッドを見たことは間違いありません。答えは非常に詳細でした。タル・ガリリから、私が正しく覚えているかどうか尋ねられました。


@suncoolsu:どうもありがとう!あなたのアドバイスに従い、prcompを実行しました。また、生成した負荷マトリックスも保存しました。しかし、このマトリックスを使用してページをグループ化するにはどうすればよいですか?
ララマイケルズ

こんにちはララマイケルズ、私の答えを以下で見つけてください。
suncoolsu

@suncoolsu:私は同様の問題を扱っていますが、同じ「ダイナミクス」を持つ個人を「クラスター化」したいです(実際、地域ごとに膨大な数の時系列があり、それらをモデル化します)。相関距離(1-rho)でpamを使用することを考えていました。これは推奨される方法ですか?探検するいくつかのパスを提案していただけますか?
-teucer

@Musa ..少しはっきりさせてください。私はあなたが言及した「力学」を理解していないと思います。間違いなくpamはクラスタリングには問題ありません。しかし、私が述べたように、Rパッケージpvclustとhopachを試すこともできます。また、SOM(自己組織化マップ)は、クラスタリングの別の見方です。詳細については、Ripley and Venable(2002)book-MASSを参照してください。この本は、クラスタリングの徹底的な取り扱いを提供します。
suncoolsu

@suncoolsu:貧弱な処方でごめんなさい!モデル化する(つまり、シミュレートする)200の時系列があります。私は、「類似」(つまり、時間の経過とともに同じ動作をしている:単純なアプローチでは相関を使用する)
系列を

4

それは確かにクラスタリングの問題です。ルピーチェックアウトclusterアルゴリズムオプションの概要を取得するには、パッケージを(pamおよびagnes開始するための最良の選択肢であり、それらは、クラスタリングにおける二つの主な流れを表す- 重心階層を)。
データでクラスタリングを使用する主な問題は、ページ間の適切な類似性の尺度を定義することです。簡単な方法は、マンハッタン距離を使用することです。一般的な視聴者の数を数え、1番目と2番目のページの視聴者数の平均で正規化すると、もう少し複雑になります。これにより、人気の影響を抑えることができます。

ページ数×ページ数


私はあなたの答えを支持しました。ただし、最後の文でレポートの新しいリンクを提供してください。古いものは死んでいます。
弟子

1
永遠に失われるのではないかと思います...一般的に、明示的に各対各類似度マトリックスを構築せず、要求に応じてオブジェクトを調査するクラスタリング手法の実装についてでした。

1

次元の削減は、基本的にクラスタリングアルゴリズムを属性(列)に適用しています。データセットの次元がかなり大きいため、SOM(自己組織化マップ/ Kohonen net)を使用して、個人またはページのマップを作成しようとする場合があります。次に、これらが意味のある(解釈可能な)パターンであるかどうかを確認できます。


1

PCAを行う場合、最初の2つ以外のコンポーネントを簡単にスクリーニングすることをお勧めします。あなたが持ってたらprcomp、オブジェクトをpc、あなたがすることができます(suncoolsuの記事を参照してください)plot(pc)別の主要な構成要素に起因する分散の量を確認すること。pairs(pc$x[,1:3])またはを使用してlattice、またはを使用して、それらのいくつか(通常は3つまたは4つ)を簡単に視覚化することもできsplom(pc$x[,1:3])ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.