วิธีการดึงข้อมูลจากเมทริกซ์สแคทเทอร์พล็อตเมื่อคุณมี N ขนาดใหญ่ข้อมูลแยกและตัวแปรจำนวนมาก


10

ฉันกำลังเล่นกับชุดข้อมูลมะเร็งเต้านมและสร้าง scatterplot ของคุณลักษณะทั้งหมดเพื่อให้ได้ไอเดียว่าอันไหนมีผลมากที่สุดในการทำนายคลาสmalignant(สีน้ำเงิน) ของbenign(สีแดง)

ฉันเข้าใจว่าแถวนั้นแทนแกน x และคอลัมน์แทนแกน y แต่ฉันไม่เห็นว่าการสังเกตใดที่ฉันสามารถทำได้เกี่ยวกับข้อมูลหรือคุณลักษณะจากสแกตเตอร์แปลงนี้

ฉันกำลังมองหาความช่วยเหลือในการตีความ / ทำการสังเกตเกี่ยวกับข้อมูลจาก scatterplot นี้หรือถ้าฉันควรใช้การสร้างภาพข้อมูลอื่น ๆ เพื่อให้เห็นภาพข้อมูลนี้

ป้อนคำอธิบายรูปภาพที่นี่

ฉันใช้รหัส R

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)

คุณพูดถูก: มันยากที่จะเห็นอะไรมากมายในเรื่องนี้ เนื่องจากตัวแปรทั้งหมดของคุณดูเหมือนจะไม่ต่อเนื่องโดยมีหมวดหมู่ค่อนข้างน้อยจึงเป็นไปไม่ได้ที่จะกำหนดจำนวนสัญลักษณ์ที่ซ้อนกันเพื่อสร้างสัญลักษณ์ที่มองเห็นได้ชัดเจน สิ่งนี้ทำให้ภาพลักษณ์ที่มีค่าเพียงเล็กน้อยในการประเมินสิ่งต่างๆ
whuber

1
นั่นคือสิ่งที่ฉันคิด ฉันลองพล็อตบาร์เปลต์แบบกล่อง แต่มันจะไม่มีประโยชน์ในการดูว่าคุณลักษณะใดมีผลต่อคลาสมากที่สุดใช่ไหม ... ? การมองหาความช่วยเหลือว่าการสร้างภาพข้อมูลเป็นอย่างไรจะให้ข้อมูลที่มีความหมาย
เบอร์ดี้

2
โปรยสีสองสีของคุณสามารถทำให้รู้สึกดีถ้าคุณกระวนกระวายใจ (เพิ่มเสียงรบกวน) กองคะแนนของคุณ
ttnphns

@ttnphns ฉันไม่เข้าใจสิ่งที่คุณหมายถึงโดย "กระวนกระวายใจกองคะแนนของคุณ"
เบอร์ดี้

1
กระวนกระวายใจหมายถึงการแก้ไขพล็อตของคุณเพื่อให้จุดวางอยู่ข้างๆกันเพื่อไม่ปิดบังมุมมองของหนึ่ง datapoint มากกว่าอีก มันมักจะใช้ในฟังก์ชั่นการวางแผน R
OFish

คำตอบ:


3

ฉันไม่แน่ใจว่านี่จะช่วยคุณได้หรือไม่ แต่สำหรับ EDA หลักฉันชอบtabplotแพ็คเกจนี้มาก ช่วยให้คุณเข้าใจถึงความสัมพันธ์ที่เป็นไปได้ที่อาจมีอยู่ในข้อมูลของคุณ

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

พล็อตที่ไม่ได้สั่ง สั่งแปลง


คนเราจะตีความแท็บล็อตนี้ได้อย่างไร จากแท็บล็อตที่สองดูเหมือนว่าคอลัมน์ 2, 3, 4 และ 7 มีพฤติกรรมคล้ายกันมากหรือไม่
เบอร์ดี้

นี่สำหรับการคัดเลือก / ทำการบ้านบางอย่าง? ถ้าเป็นเช่นนั้นโปรดอ้างอิง metas สำหรับกฎและอื่น ๆ เกี่ยวกับการขอความช่วยเหลือเกี่ยวกับ assigments คำตอบสั้น ๆ ของฉัน: a) ฉันไม่มีเงื่อนงำความหมายของค่าที่ต่างกันทั้งหมดในคอลัมน์เพราะฉันไม่ได้ศึกษาชุดข้อมูลคำอธิบาย b) ถ้าฉันเพียงแค่อธิบายสิ่งที่ฉันเห็นฉันจะบอกว่า: ชั้น 4 ดูเหมือนจะเป็น เกี่ยวข้องกับค่าที่สูงขึ้นของแต่ละคอลัมน์ / ตัวแปรและในทางกลับกัน
OFish

6

มีปัญหาหลายอย่างที่ทำให้ยากหรือเป็นไปไม่ได้ที่จะดึงข้อมูลที่ใช้งานได้จากเมทริกซ์สแคตเตอร์ล็อตของคุณ

คุณมีตัวแปรที่แสดงมากเกินไปเข้าด้วยกัน เมื่อคุณมีตัวแปรจำนวนมากในเมทริกซ์การกระจายแต่ละพล็อตจะเล็กเกินไปที่จะเป็นประโยชน์ สิ่งที่สังเกตได้คือมีการทำซ้ำหลายแปลงซึ่งทำให้เปลืองพื้นที่ นอกจากนี้แม้ว่าคุณต้องการเห็นชุดค่าผสมทุกชุดคุณไม่จำเป็นต้องพล็อตชุดค่าผสมทั้งหมดเข้าด้วยกัน ขอให้สังเกตว่าคุณสามารถแบ่งเมทริกซ์กระจายเป็นบล็อกเล็ก ๆ สี่หรือห้า (ตัวเลขที่สามารถมองเห็นได้เป็นประโยชน์) คุณเพียงแค่ต้องทำการแปลงหลาย ๆ แปลงสำหรับแต่ละแปลง

ป้อนคำอธิบายรูปภาพที่นี่

เนื่องจากคุณมีข้อมูลจำนวนมากที่จุดที่ไม่ต่อเนื่องในอวกาศพวกมันจึงจบลงด้วยการซ้อนทับกัน ดังนั้นคุณไม่สามารถดูจำนวนคะแนนในแต่ละตำแหน่งได้ มีเทคนิคหลายอย่างที่จะช่วยคุณจัดการเรื่องนี้

  1. 0.5
  2. ด้วยข้อมูลจำนวนมากการกระวนกระวายใจจะทำให้ผู้สังเกตการณ์มองเห็นได้ยาก คุณสามารถใช้สีที่มีความอิ่มตัวสูง แต่ส่วนใหญ่โปร่งใสสำหรับบัญชีนี้ ในกรณีที่มีข้อมูลจำนวนมากซ้อนกันอยู่ด้านบนสีจะเข้มขึ้นและมีความหนาแน่นน้อยสีจะจางลง
  3. เพื่อความโปร่งใสในการทำงานคุณจะต้องใช้สัญลักษณ์ที่เป็นของแข็งเพื่อแสดงข้อมูลของคุณในขณะที่ R ใช้วงกลมกลวงตามค่าเริ่มต้น

ใช้กลยุทธ์เหล่านี้นี่คือตัวอย่างรหัส R และแปลงที่ทำ:

# 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)

ป้อนคำอธิบายรูปภาพที่นี่

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

ป้อนคำอธิบายรูปภาพที่นี่

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) }
    }
  }

ป้อนคำอธิบายรูปภาพที่นี่


5

เป็นการยากที่จะเห็นภาพมากกว่า 3-4 มิติในการวางแผนเดียว ทางเลือกหนึ่งคือการใช้การวิเคราะห์องค์ประกอบหลัก (PCA) ในการบีบอัดข้อมูลแล้วแสดงภาพในมิติหลัก มีแพ็กเกจต่าง ๆ ใน R (รวมถึงprcompฟังก์ชันพื้นฐาน) ที่ทำให้ง่ายในการสร้างประโยค ( ดู CRAN ); การตีความพล็อตเรื่องการโหลดเป็นอีกเรื่องหนึ่ง แต่ฉันคิดว่าง่ายกว่าเมทริกซ์ Scatterplot ลำดับ 10 แบบแปรผัน

ป้อนคำอธิบายรูปภาพที่นี่


ขอบคุณสำหรับคำแนะนำเกี่ยวกับ PCA ฉันไม่รู้เกี่ยวกับมัน ฉันจะตีความภาพที่คุณโพสต์ได้อย่างไร หมายความว่าคุณลักษณะทั้งหมดที่รวมกันเป็นกลุ่มจะมีความสำคัญหรือไม่
เบอร์ดี้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.