【问题标题】:Kmeans in R using multiple tablesR中的Kmeans使用多个表
【发布时间】:2016-01-23 08:58:17
【问题描述】:

我是 R 新手。我正在尝试解决一个问题 -

我有 3 张桌子-

SubCode - 包含主题及其代码

CompSci C
InfoSci I
Math M
Business B
Journalism J

CourseCodeSub - 包含课程代码及其所属的主题

1 C,I
2 C,I,M
3 B,J,I
4 M,B
5 B,J,M
6 C,M

StudentIDCourse - 包含学生 ID 和所学课程

S1 1,2,6
S2 4,5
S3 5,2,4
S4 1,2,3
S5 3,6
S7 4

我如何使用 kmeans 从这些数据中了解学生对每个科目的兴趣?

【问题讨论】:

  • 正如所写,您的问题不适合 SO。你问的是如何理解你的模型,而不是询问你的模型编程。通过修订,您的问题可能非常适合交叉验证。
  • k-means 是为连续变量设计的。它不会对课程数据产生有意义的结果。错误的工具。

标签: r data-mining k-means


【解决方案1】:

这个问题没有很好地提出 - 所以我将展示如何使用每个学生参加的每个“科目”的数量来取出一个 kmeans 对象。实际上,您可能想要一个这样的 PCA,然后是 kmeans,但这为如何处理它提供了一个思路。

您首先需要将数据转换为合理的格式。我使用 dat 作为 CourseCodeSub 和 dat2 作为 StudentIDCourse:

library(dplyr)
library(tidyr)
dat <- dat %>%
  mutate(subjects = strsplit(as.character(subjects), ",")) %>%
  unnest(subjects)
dat2 <- dat2 %>% 
  mutate(course = strsplit(as.character(course), ",")) %>%
  unnest(course) %>%
  mutate(course = as.numeric(course))

现在您的数据是长格式的。接下来,我们将它们合并,得到每个学生的data.frame,以及每个学生的每个科目的数量:

totable <- left_join(dat2, dat, by = "course") %>%
  group_by(student, subjects) %>%
  summarise(number = n()) %>%
  spread(subjects, number, fill = 0)

Source: local data frame [6 x 6]

  student     B     C     I     J     M
   (fctr) (dbl) (dbl) (dbl) (dbl) (dbl)
1      S1     0     3     2     0     2
2      S2     2     0     0     1     2
3      S3     2     1     1     1     3
4      S4     1     2     3     1     1
5      S5     1     1     1     1     1
6      S7     1     0     0     0     1

现在我们可以做一个kmeans

clustered <- kmeans(totable[,2:6], 3)
plot(totable[,2:6], col = clustered$cluster)

并查看哪个学生在哪个集群中:

cbind(totable$student, clustered$cluster)
     [,1] [,2]
[1,]    1    2
[2,]    2    1
[3,]    3    1
[4,]    4    2
[5,]    5    3
[6,]    6    3

【讨论】:

    猜你喜欢
    • 2015-12-03
    • 2018-08-21
    • 2018-04-17
    • 2013-07-20
    • 1970-01-01
    • 2015-03-06
    • 2018-07-31
    • 2016-11-25
    • 1970-01-01
    相关资源
    最近更新 更多