分析k均值导致R

时间:2015-05-07 07:59:38

标签: r k-means

我在R中执行了k-means聚类,但我无法分析结果。我只是想创建一个包含导入数据框的数据框以及每个观察的聚类ID和聚类中心,这样我就可以进一步探索结果的准确性,例如1/2标准偏差和等等。

这是我用过的代码:

struct address

使用以下载体:

<html>
<body>

<head>

<script type="text/javascript">

var select = document.getElementById('cmbitems');
var input = document.getElementById('txtname');
select.onchange = function() {
    input.value = select.value;
}


</script>


</head>


<table>
    <tr>
        <td colspan="2">DISPLAY</td>
    </tr>
    
        <tr>
        <td>RESULT 1 <input type="text" name="cmbitems" id="cmbitems" onClick="checkItem()"></td>
        <td>RESULT 2</td>
    </tr>
    <tr>
    
    <tr>
        <td>
        
        BEGINNING
        
        
<select name="cmbitems" id="cmbitems">
    <option value="name1">flow</option>
    <option value="name2">green</option>
    <option value="name3">red</option>
</select>      
        
        
        
        
        
        
        </td>
        <td>END
          
        
        
        </td>
    </tr>
</table>


</body>
</html>

以下数据框:

iris = read.csv("C:\\Users\\newuser\\Desktop\\Data Anlysis\\Data Sets\\iris.csv")
results = kmeans(iris, 3)

包含观察结果,其中包含以下列:“X1”,“X2”,“X3”

我想在每行中创建一个包含以下列的数据框:“X1”,“X2”,“X3”,“ClusterID”,“X1_Center”,“X2_Center”和“X3_Center”

1 个答案:

答案 0 :(得分:2)

创建数据框架很简单,虽然我认为“X1_Center”列实际上是4列,因为你有4个不同的功能是你实际需求的最佳答案,我认为不是。

然而,这是产生它的代码

results = kmeans(iris[,c("Sepal.Length","Sepal.Width","Petal.Length","Petal.Width")], 3)
library(data.table)
data <- iris
setDT(data)

# creating cluster_ID
data[,cluster_ID:=results$cluster]

# creating the X1, X@, X3 columns
data[,':='(X1=0,X2=0,X3=0)]
data[cluster_ID==1,X1:=1]
data[cluster_ID==2,X2:=1]
data[cluster_ID==3,X3:=1]

# add the duplicated center cordinates
data <- cbind(data,rep(1,nrow(data)) %*% t.default(results$centers[1,]))
data <- cbind(data,rep(1,nrow(data)) %*% t.default(results$centers[2,]))
data <- cbind(data,rep(1,nrow(data)) %*% t.default(results$centers[3,]))

# setnames for the addded columns
setnames(data,c(names(data)[1:9],
            paste0("X1_center_",names(data)[1:4]),
            paste0("X2_center_",names(data)[1:4]),
            paste0("X3_center_",names(data)[1:4])))