K- เพื่อนบ้านที่ใกล้เคียงที่สุดกับตัวแปรต่อเนื่องและไบนารี


10

ฉันมีชุดข้อมูลที่มีคอลัมน์a b c(3 คุณลักษณะ) aเป็นตัวเลขและต่อเนื่องในขณะที่bและcเป็นหมวดหมู่แต่ละคนมีสองระดับ ฉันใช้ K-เพื่อนบ้านที่ใกล้ที่สุดวิธีการในการจำแนกaและบนb cดังนั้นเพื่อให้สามารถวัดระยะทางที่ผมเปลี่ยนชุดข้อมูลของฉันโดยการลบbและการเพิ่มและb.level1 b.level2หากสังเกตiมีระดับเป็นครั้งแรกในbประเภทและb.level1[i]=1b.level2[i]=0

ตอนนี้ฉันสามารถวัดระยะทางในชุดข้อมูลใหม่ของฉัน: a b.level1 b.level2

จากมุมมองเชิงทฤษฎี / คณิตศาสตร์: คุณสามารถทำการ K- ใกล้เคียงเพื่อนบ้าน (KNN) ด้วยข้อมูลไบนารีและต่อเนื่องได้หรือไม่

ฉันใช้FNNแพ็คเกจใน R และฟังก์ชั่นknn()


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

เพราะฉันไม่เห็นวิธีที่ดีกว่าในการเปรียบเทียบตัวแปรตัวเลขกับตัวแปรเด็ดขาด อย่าลังเลที่จะแนะนำวิธีการที่ดีกว่า :)
k.dkhk

คำตอบ:


11

การรวมตัวแปรเด็ดขาดและคุณลักษณะต่อเนื่องเข้าด้วยกัน

ยังไงก็ตามไม่มีเหตุผลทางทฤษฎีสำหรับวิธีการเช่น k-NN ฮิวริสติกคือถ้าสองจุดอยู่ใกล้กัน (ตามระยะทาง) แล้วพวกเขาก็มีบางสิ่งที่เหมือนกันในแง่ของผลลัพธ์ อาจจะใช่อาจจะไม่ใช่ และขึ้นอยู่กับระยะทางที่คุณใช้

ในตัวอย่างของคุณคุณกำหนดระยะห่างระหว่างจุดสองจุดและเช่น:(a,b,c)(a,b,c)

  • ใช้ระยะห่างระหว่างกับ :aa(aa)2
  • เพิ่ม +2 ถ้าและแตกต่าง +0 ถ้าเท่ากัน (เพราะคุณนับความแตกต่าง 1 สำหรับแต่ละหมวดหมู่)bb
  • เพิ่ม +2 ถ้าและต่าง, +0 เท่ากับ (เหมือนกัน)cc

สิ่งนี้สอดคล้องกับการให้น้ำหนักโดยนัยต่อคุณลักษณะแต่ละอย่าง

โปรดทราบว่าถ้าใช้เวลาค่าขนาดใหญ่ (เช่น 1000 2000 ... ) ที่มีความแปรปรวนใหญ่แล้วน้ำหนักของคุณสมบัติไบนารีจะเล็กน้อยเมื่อเทียบกับน้ำหนักของ เฉพาะระยะห่างระหว่างและจะสำคัญ และวิธีอื่น ๆ : ถ้าใช้ค่าน้อยเช่น 0.001: จะนับเฉพาะฟีเจอร์ไบนารีaaaaa

คุณสามารถทำให้พฤติกรรมเป็นปกติได้โดยการชั่งน้ำหนักอีกครั้ง: การหารแต่ละคุณลักษณะด้วยค่าเบี่ยงเบนมาตรฐาน สิ่งนี้ใช้กับตัวแปรต่อเนื่องและไบนารี คุณอาจให้น้ำหนักที่คุณต้องการ

โปรดทราบว่าฟังก์ชัน R kNN () ทำเพื่อคุณ: https://www.rdocumentation.org/packages/DMwR/versions/0.4.1/topics/kNN

ในความพยายามครั้งแรกเพียงแค่ใช้ norm = จริง (การทำให้เป็นมาตรฐาน) สิ่งนี้จะหลีกเลี่ยงความไม่รู้สึกส่วนใหญ่ที่อาจปรากฏขึ้นเมื่อรวมคุณสมบัติต่อเนื่องและหมวดหมู่


คำตอบที่ดี (+1) อย่างไรก็ตามคุณอาจพูดถึงว่ามิติสูงและมีตัวแปรที่แยกจากกันหลายอย่างโดยมีระยะทางแบบยุคลิดอาจไม่ได้ผล
Haitao Du

6

ใช่แน่นอนคุณสามารถใช้ KNN กับทั้งข้อมูลไบนารีและข้อมูลต่อเนื่อง แต่มีข้อควรพิจารณาที่สำคัญบางประการที่คุณควรทราบเมื่อทำเช่นนั้น

ผลลัพธ์จะได้รับการแจ้งอย่างหนักจากตัวแยกไบนารีที่สัมพันธ์กับการกระจายตัวของผลลัพธ์ที่มีมูลค่าที่แท้จริง (สำหรับเวกเตอร์ที่ไม่ได้ปรับขนาด 0-1, ที่ไม่ได้ถ่วงน้ำหนัก) ดังแสดงด้านล่าง:

การแยกตัวแปรมูลค่าจริงและไบนารี

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

ยิ่งไปกว่านั้นสิ่งนี้ขยายไปถึงตัวแปรไบนารีหลายตัว - ถ้าเราเปลี่ยนหนึ่งในตัวแปรมูลค่าจริงเป็นไบนารีเราจะเห็นว่าระยะทางจะได้รับการแจ้งมากขึ้นโดยการจับคู่กับตัวแปรไบนารีทั้งหมดที่เกี่ยวข้องมากกว่าใกล้ค่าจริง:

การแยกตัวแปรมูลค่าจริงและไบนารี

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

#code to reproduce plots:
library(scatterplot3d) 

scalevector <- function(x){(x-min(x))/(max(x)-min(x))}

x <- scalevector(rnorm(100))
y <- scalevector(rnorm(100))
z <- ifelse(sign(rnorm(100))==-1, 0, 1)
df <- data.frame(cbind(x,y,z))

scatterplot3d(df$x, df$z, df$y, pch=16, highlight.3d=FALSE,
              type="h", angle =235, xlab='', ylab='', zlab='')

x <- scalevector(rnorm(100))
y <- ifelse(sign(rnorm(100))==-1, 0, 1)
z <- ifelse(sign(rnorm(100))==-1, 0, 1)
df <- data.frame(cbind(x,y,z))

scatterplot3d(df$x, df$z, df$y, pch=16, highlight.3d=FALSE,
              type="h", angle =235, xlab='', ylab='', zlab='')
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.