Python K-means在文档上进行聚类

时间:2016-08-11 03:02:21

标签: python cluster-analysis k-means

Python代码:

package main

import ("bufio"
    "fmt"
    "os"
  "strings")

 type array struct{
  pos string
  bitrep int64
numrep,v1,v2,v3,v4,v5,v6,v7,v8 int8
}

func main() {

file, err := os.Open("chessin.txt")
    if err != nil {
        fmt.Println(err)
    }
    defer file.Close()
    scanner := bufio.NewScanner(file)
    valid := []bool{}
    for scanner.Scan() {
        b := strings.Split(scanner.Text(), ",")
        valid = append(valid, isvalid(b))
    }
    fmt.Println(valid)
    info :=[64][11]array {
      info.pos = Possiblemoves(pos)
      info.bitrep=coverttobit(num)
       info.numrep=toNumber(string)
       info.v0=moves[0]
       info.v1=moves[1]
       info.v2=moves[2]
       info.v3=moves[3]
       info.v4=moves[4]
       info.v5=moves[5]
       info.v6=moves[6]
       info.v7=moves[7]

    }
}


func convertingtobit( num int){
  n := int64(num)
  bit:=strconv.FormatInt(n, 2)
}




func isvalid(b string) bool {

  if  b[0]<='H' && b[0]>='A' && b[1]<='8' && b[1]>='0' {
    return true
      }
  return false
}


func toNumber(s string) int {

    if len(s) != 2 {
       fmt.Println("Invalid Input",s,".") 
       } 
      num=int(s[0]-'A')*8 + int(s[1]-'0')
      return num
}

func PossibleMoves(a string) {
  isvalid := isvalid(a)
 if isvalid == true {
var moves [8]string

moves[0]=string(a[0]+1)+string(a[1]+2)
moves[1]=string(a[0]+1)+string(a[1]-2)
moves[2]=string(a[0]-1)+string(a[1]+2)
moves[3]=string(a[0]-1)+string(a[1]-2)
moves[4]=string(a[0]+2)+string(a[1]+1)
moves[5]=string(a[0]+2)+string(a[1]-1)
moves[6]=string(a[0]-2)+string(a[1]+1)
moves[7]=string(a[0]-2)+string(a[1]-1)

fmt.Println("Possible moves are : ",moves)

var PosMoves [8] int


  for i:=0;i<8;i++ {
    if isvalid == true {
    PosMoves[i]=toNumber(moves[i])
  }
}
fmt.Println("After converting : ",PosMoves)

   } else {
    fmt.Println("Invalid Input")
   }
}

主题1指特定区域,主题2指一般区域。我尝试通过将K-means应用到三个群集来与主题2匹配来聚类主题1.我不知道我想念的是什么。

2 个答案:

答案 0 :(得分:1)

你想要在这里实现目标并不是很清楚。为了使用k-means算法,您需要明确两个基本问题:

  1. 您的输入数据是什么? k-means算法通常只对一组数据对象起作用,而每个对象可以由多个属性定义。因此,如果您只想在subject1上执行群集,或者想要整合来自subject2的信息,则需要决定。通过向subject1
  2. 中的项添加属性
  3. 你的距离测量是什么? k-means的关键部分是找到最接近的质心,这需要对数据进行有意义的距离测量。这可能是一个简单的基于字符的距离或基于您的数据功能的更特殊的措施。重要的是,您的距离度量表示数据中与项目类似的方面。
  4. 如果您想为群集分配某些标签(subject2?),则可以在执行常规k-means算法后执行此操作,例如通过对所发现的聚类的内省。

    这是如何处理此算法应用的非常一般的指导原则。如果您提供有关您拥有的和您希望实现的目标的更详细信息,我们可能会提供更好的帮助。

答案 1 :(得分:0)

您实际上正在寻找的似乎是主题聚类/语义挖掘。即:基于一般公共区域对单词对/组进行分组。因此,您希望查看NLP区域,例如topic modeling.semantic similarity