Я создал dataframe dfall, содержащую 3 линейных компоненты регрессииR выделения 3 компонента линейной регрессии из смеси
x1=runif(50, min=0, max=100)
e1=runif(50, min=0, max=10)
y1 <- 0.2*x1+10+e1
y1
plot(x1,y1,col="blue")
df1 <- data.frame(x=x1,y=y1)
df1$ID <- 1
df1$col <- "red"
x2=runif(25, min=0, max=100)
e2=runif(25, min=0, max=5)
y2 <- 0.7*x2+15+e2
y2
plot(x2,y2,col="blue")
df2 <- data.frame(x=x2,y=y2)
df2$ID <- 2
df2$col <- "green"
x3=runif(35, min=0, max=100)
e3=runif(35, min=0, max=15)
y3 <- -0.5*x3+30+e3
y3
plot(x3,y3,col="blue")
df3 <- data.frame(x=x3,y=y3)
df3$ID <- 3
df3$col <- "blue"
dfall <-rbind(df1,df2,df3)
dfall
dfall <- dfall[sample(1:nrow(dfall)), ]
dfall
plot(dfall$x,dfall$y,col=dfall$col)
Затем я попытался отделить линейные компоненты регрессии с помощью kmeans:
fitkm <- kmeans(dfall[,c(1:2)], 3)
dfall <- data.frame(dfall, km=fitkm$cluster)
dfall
Однако Я получил очень плохие результаты классификации:
table(dfall$ID,dfall$km)
Есть ли более способ точно отделить 3 линейные регрессионные компоненты? Благодарим вас за помощь.
Я чувствую, что этот вопрос лучше подходит для http://stats.stackexchange.com/ –
Kmeans создает кластеры на основе расстояния от точек (центров). Алгоритмы кластеризации на основе плотности лучше подходят для решения вашей проблемы. Попробуйте использовать GMM. – ab90hi