【问题标题】:query classification using Apache spark Mlib使用 Apache spark Mllib 进行查询分类
【发布时间】:2015-03-07 16:14:59
【问题描述】:

我对机器学习了解很多,但对 scala 和 spark 不熟悉。由于 Spark API 卡住了,请指教。

我有一个txt文件,每行格式都是这样的

#label \t   # query, a strong of words, delimited by space
1  wireless amazon kindle

2  apple iPhone 5

1  kindle fire 8G

2  apple iPad

第一个字段是标签,第二个字段是字符串 我的计划是将数据拆分为标签和特征,使用内置函数 Word2Vec 将字符串转换为稀疏向量(我假设它首先使用词袋获取 dict),然后使用 SVMWithSGD 进行分类训练

object QueryClassification {


  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("Query Classification").setMaster("local")
    val sc = new SparkContext(conf)
    val input = sc.textFile("spark_data.txt")

    val word2vec = new Word2Vec()

    val parsedData = input.map {line =>
      val parts = line.split("\t")

      ## How to write code here? I need to parse into feature vector 
      ## properly and then apply word2vec function after the map
      *LabeledPoint(parts(0).toDouble, ????)*   
    }

    ## * is the item I got from parsing parts(1) above
    word2vec.fit(*)  





    val numIterations = 20
    val model = SVMWithSGD.train(parsedData,numIterations)


  }
}

非常感谢

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    如果你使用word2vec算法,你应该用字符串的单词来训练word2vec。

    val vocabulary = input.map {line =>
      val parts = line.split("\t")
      val partWords = parts(1).split(" ")
      partWords.toSeq
    }
    val word2vec = new Word2Vec()
    val wordModel = word2vec.fit(vocabulary)
    

    对于词汇表中的单词,可以从 wordModel.transform(word) 中得到一个词向量。 因为SVM需要二值(0或1)的LabelPoint,所以不知道怎么把label字段转成二值?

    【讨论】:

      猜你喜欢
      • 2017-01-28
      • 2014-10-27
      • 2016-03-07
      • 2017-02-06
      • 2017-03-07
      • 2018-02-17
      • 2015-02-07
      • 1970-01-01
      • 2015-03-31
      相关资源
      最近更新 更多