Bagaimana cara mengekstrak informasi dari matriks sebar ketika Anda memiliki N besar, data diskrit, & banyak variabel?

10

Saya bermain-main dengan dataset kanker payudara dan membuat sebar semua atribut untuk mendapatkan ide yang paling berpengaruh dalam memprediksi kelas malignant(biru) dari benign(merah).

Saya mengerti bahwa baris mewakili sumbu x dan kolom mewakili sumbu y tetapi saya tidak dapat melihat pengamatan apa yang dapat saya lakukan tentang data atau atribut dari sebar ini.

Saya mencari bantuan untuk menafsirkan / membuat pengamatan tentang data dari sebar ini atau jika saya harus menggunakan beberapa visualisasi lain untuk memvisualisasikan data ini.

masukkan deskripsi gambar di sini

Kode R yang saya gunakan

link   <- "http://www.cs.iastate.edu/~cs573x/labs/lab1/breast-cancer-wisconsin.arff"
breast <- read.arff(link)
cols   <- character(nrow(breast))
cols[] <- "black"
cols[breast$class == 2] <- "red"
cols[breast$class == 4] <- "blue"
pairs(breast, col=cols)
birdy
sumber
Anda benar: sulit melihat banyak hal dalam hal ini. Karena semua variabel Anda tampak terpisah, dengan jumlah kategori yang relatif kecil, tidak mungkin untuk menentukan berapa banyak simbol yang ditumpuk untuk membentuk setiap simbol yang terlihat jelas. Itu membuat citra khusus ini bernilai kecil dalam menilai apa pun.
whuber
1
Itulah yang saya pikirkan. Saya mencoba merencanakan barplot kotak tapi itu tidak akan berguna dalam melihat atribut mana yang paling berpengaruh di kelas kan ...? Mencari bantuan tentang jenis visualisasi apa yang akan memberikan beberapa informasi yang bermakna.
birdy
2
Menyebarkan dua warna Anda dapat masuk akal jika Anda jitter (menambah kebisingan) tumpukan poin Anda.
ttnphns
@ttnphns Saya tidak mengerti apa yang Anda maksud dengan "jitter tumpukan poin Anda"
birdy
1
jitter berarti mengedit plot Anda, sehingga titik-titik di atasnya ditempatkan di samping satu sama lain untuk tidak mengaburkan tampilan satu titik data di atas yang lain. ini sering digunakan dalam fungsi merencanakan R.
OFish

Jawaban:

3

Saya tidak yakin apakah ini bisa membantu Anda, tetapi untuk EDA primer saya sangat suka tabplotpaketnya. Memberi Anda pengertian baik tentang kemungkinan korelasi apa yang mungkin ada dalam data Anda.

install.packages("tabplot")
tableplot(breast) # gives you the unsorted image below
tableplot(breast, sortCol="class") # gives you a sorted image according to class

plot yang tidak teratur plot yang dipesan

OFish
sumber
bagaimana orang menafsirkan tabplot ini? Dari tabplot kedua sepertinya kolom 2, 3, 4, dan 7 berperilaku sangat mirip satu sama lain?
birdy
Apakah ini semacam tugas / pekerjaan rumah? Jika demikian, silakan merujuk ke meta untuk aturan dll tentang mendapatkan bantuan dengan bantuan. Jawaban singkat saya: a) Saya tidak tahu apa artinya semua nilai yang berbeda di kolom karena saya belum mempelajari deskripsi dataset, b) jika saya hanya menjelaskan apa yang saya lihat, saya akan mengatakan: kelas 4 tampaknya menjadi terkait dengan nilai yang lebih tinggi dari setiap kolom / variabel dan sebaliknya.
OFish
6

Ada sejumlah masalah yang membuatnya sulit atau tidak mungkin untuk mengekstrak informasi yang dapat digunakan dari matriks sebar Anda.

Anda memiliki terlalu banyak variabel yang ditampilkan bersama. Ketika Anda memiliki banyak variabel dalam matriks sebar, setiap plot menjadi terlalu kecil untuk berguna. Yang perlu diperhatikan adalah banyak plot digandakan, yang membuang-buang ruang. Selain itu, meskipun Anda ingin melihat setiap kombinasi, Anda tidak harus menyusun semuanya. Perhatikan bahwa Anda dapat memecah matriks scatterplot menjadi blok yang lebih kecil dari empat atau lima (angka yang berguna secara visual). Anda hanya perlu membuat beberapa plot, satu untuk setiap blok.

masukkan deskripsi gambar di sini

Karena Anda memiliki banyak data pada titik-titik diskrit di ruang , mereka akhirnya menumpuk satu sama lain. Dengan demikian, Anda tidak dapat melihat berapa banyak titik di setiap lokasi. Ada beberapa trik untuk membantu Anda menangani ini.

  1. Yang pertama adalah jitter . Jittering berarti menambahkan sedikit noise ke nilai-nilai dalam dataset Anda. Kebisingan diambil dari distribusi seragam yang berpusat pada nilai Anda plus atau minus sejumlah kecil. Ada algoritma untuk menentukan jumlah yang optimal, tetapi karena data Anda datang dalam satuan penuh dari satu hingga sepuluh, sepertinya pilihan yang baik. .5
  2. Dengan begitu banyak data, bahkan jittering akan membuat patters sulit untuk dilihat. Anda dapat menggunakan warna yang sangat jenuh, tetapi sebagian besar transparan untuk menjelaskan hal ini. Di mana ada banyak data yang ditumpuk di atas satu sama lain, warnanya akan menjadi lebih gelap, dan di mana ada sedikit kepadatan, warnanya akan lebih terang.
  3. Agar transparansi berfungsi, Anda akan memerlukan simbol yang solid untuk menampilkan data Anda, sedangkan R menggunakan lingkaran kosong secara default.

Dengan menggunakan strategi ini, berikut adalah beberapa contoh kode R dan plot yang dibuat:

# the alpha argument in rgb() lets you set the transparency
cols2 = c(rgb(red=255, green=0, blue=0,   alpha=50, maxColorValue=255),
          rgb(red=0,   green=0, blue=255, alpha=50, maxColorValue=255) )
cols2 = ifelse(breast$class==2, cols2[1], cols2[2])
# here we jitter the data
set.seed(6141)  # this makes the example exactly reproducible
jbreast = apply(breast[,1:9], 2, FUN=function(x){ jitter(x, amount=.5) })
jbreast = cbind(jbreast, class=breast[,10])  # the class variable is not jittered

windows()  # the 1st 5 variables, using pch=16
  pairs(jbreast[,1:5], col=cols2, pch=16)

masukkan deskripsi gambar di sini

windows()  # the 2nd 5 variables
  pairs(jbreast[,6:10], col=cols2, pch=16)

masukkan deskripsi gambar di sini

windows()  # to match up the 1st & 2nd sets requires more coding
  layout(matrix(1:25, nrow=5, byrow=T))
  par(mar=c(.5,.5,.5,.5), oma=c(2,2,2,2))
  for(i in 1:5){
    for(j in 6:10){
      plot(jbreast[,j], jbreast[,i], col=cols2, pch=16, 
           axes=F, main="", xlab="", ylab="")
      box()
      if(j==6 ){ mtext(colnames(jbreast)[i], side=2, cex=.7, line=1) }
      if(i==5 ){ mtext(colnames(jbreast)[j], side=1, cex=.7, line=1) }
      if(j==10){ axis(side=4, seq(2,10,2), cex.axis=.8) }
      if(i==1 ){ axis(side=3, seq(2,10,2), cex.axis=.8) }
    }
  }

masukkan deskripsi gambar di sini

gung - Pasang kembali Monica
sumber
5

Sulit untuk memvisualisasikan lebih dari 3-4 dimensi dalam satu plot. Salah satu opsi adalah menggunakan analisis komponen utama (PCA) untuk memampatkan data dan kemudian memvisualisasikannya dalam dimensi utama. Ada beberapa paket berbeda dalam R (juga prcompfungsi dasar ) yang membuat ini mudah secara sintaksis ( lihat CRAN ); menafsirkan plot, memuat, adalah cerita lain, tapi saya pikir lebih mudah daripada 10 matriks ordterplot variabel variabel.

masukkan deskripsi gambar di sini

Ikan kecil
sumber
Terima kasih atas saran pada PCA. Saya tidak tahu tentang itu. Bagaimana saya menafsirkan gambar yang Anda posting? Apakah ini berarti bahwa semua atribut yang terkumpul dalam suatu kelompok akan menjadi penting?
birdy