μ΄ a b c
(3 μμ±) μ΄μλ λ°μ΄ν° μΈνΈκ° μμ΅λλ€ . a
λ°λ©΄ μ«μμ μ°μ b
κ³Ό c
λ κ°μ§ μμ€μ κ° λ²μ£Όμ
λλ€. K-Nearest Neighbors λ°©λ²μ μ¬μ©νμ¬ λΆλ₯ a
νκ³ b
μμ΅λλ€ c
. λ°λΌμ 거리λ₯Ό μΈ‘μ ν μ μμΌλ €λ©΄ λ°λ₯Ό b
μΆκ° b.level1
νκ³ μΆκ°νμ¬ λ°μ΄ν° μΈνΈλ₯Ό λ³ννμμμ€ b.level2
. κ΄μΈ‘μΉ i
μ b
λ²μ£Ό μ 첫 λ²μ§Έ μμ€μ΄μλ κ²½μ° b.level1[i]=1
λ° b.level2[i]=0
.
μ΄μ μ λ°μ΄ν° μΈνΈμμ 거리λ₯Ό μΈ‘μ ν μ μμ΅λλ€. a b.level1 b.level2
μ΄λ‘ μ / μνμ κ΄μ μμ : μ΄μ§ λ°μ΄ν°μ μ°μ λ°μ΄ν°λ₯Ό λͺ¨λ μ¬μ©νμ¬ K- μ΅κ·Ό μ μ΄μ (KNN)μ μν ν μ μμ΅λκΉ?
FNN
Rμμ ν¨ν€μ§λ₯Ό μ¬μ© νκ³ μμ΅λλ€.knn()
λ΅λ³
λ²μ£Ό ν λ³μμ μ°μ λ³μ (κΈ°λ₯)λ₯Ό κ²°ν©ν΄λλ©λλ€.
k-NNκ³Ό κ°μ λ°©λ²μ λν μ΄λ‘ μ κ·Όκ±°λ 그리 λ§μ§ μμ΅λλ€. ν΄λ¦¬μ€ν±μ λ μ§μ μ΄ μλ‘μ κ°κΉλ€λ©΄ (μΌλΆ 거리μ λ°λΌ) μΆλ ₯ μΈ‘λ©΄μμ 곡ν΅μ μ΄ μλ€λ κ²μ λλ€. μλ§ κ·Έλ μ΅λλ€, μλ§ κ·Έλ μ΅λλ€. κ·Έλ¦¬κ³ κ·Έκ²μ λΉμ μ΄ μ¬μ©νλ 거리μ λ¬λ € μμ΅λλ€.
κ·νμ μμμλ λ μ μ¬μ΄μ 거리λ₯Ό μ μν©λλ€
(a,b,c)κ³Ό
(aβ²,bβ²,cβ²)κ°μ :
- μ¬μ΄μ μ κ³± 거리λ₯Ό
a κ³Ό aβ² : (aβaβ²)2 - κ²½μ° +2 μΆκ°
b κ³Ό bβ² κ°μΌλ©΄ +0μ΄ λ€λ¦ λλ€ (κ° μΉ΄ν κ³ λ¦¬λ§λ€ 1μ μ°¨μ΄λ₯Ό κ³μ°νκΈ° λλ¬Έμ) - κ²½μ° +2 μΆκ°
c κ³Ό cβ² λ€λ₯΄λ©° +0μ κ°μ΅λλ€ (λμΌ ν¨)
μ΄λ κ° κΈ°λ₯μ μμ μ μΌλ‘ κ°μ€μΉλ₯Ό λΆμ¬νλ κ²μ ν΄λΉν©λλ€.
λ§μ½μ
aν° λΆμ°μΌλ‘ ν° κ° (1000, 2000 λ±)μ μ·¨νλ©΄ μ΄μ§ νΌμ²μ κ°μ€μΉλ κ°μ€μΉμ λΉκ΅ν λ 무μν μ μμ΅λλ€
a. μ¬μ΄μ 거리 λ§
aκ³Ό
aβ²μ λ§ μ€μν©λλ€. κ·Έλ¦¬κ³ λ€λ₯Έ λ°©λ² : if
a0.001κ³Ό κ°μ μμ κ°μ μ·¨ν©λλ€. μ΄μ§ κΈ°λ₯ λ§ κ³μ°λ©λλ€.
κ° κΈ°λ₯μ νμ€ νΈμ°¨λ‘ λλλ©΄ 무κ²λ₯Ό λ€μ μΈ‘μ νμ¬ λμμ μ κ·ν ν μ μμ΅λλ€. μ΄λ μ°μ λ³μμ μ΄μ§ λ³μμ λͺ¨λ μ μ©λ©λλ€. μμ μ΄ μ νΈνλ κ°μ€μΉλ₯Ό μ 곡 ν μλ μμ΅λλ€.
R ν¨μ kNN ()μ λΉμ μ μν΄ κ·Έκ²μν©λλ€ : https://www.rdocumentation.org/packages/DMwR/versions/0.4.1/topics/kNN
첫 λ²μ§Έ μλλ‘ κΈ°λ³Έμ μΌλ‘ norm = true (μ κ·ν)λ₯Ό μ¬μ©νμμμ€. μ΄λ κ²νλ©΄ μ°μ λ° λ²μ£Ό κΈ°λ₯μ κ²°ν© ν λ λνλ μμλ λλΆλΆμ λ§μ΄λμ§ μμ΅λλ€.
λ΅λ³
κ·Έλ μ΅λλ€. λ°μ΄λ리 λ° μ°μ λ°μ΄ν°μ ν¨κ» 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='')