spark scala word2vec 和多层分类感知器在情感分析中的实际应用
转自:http://www.cnblogs.com/canyangfeixue/p/7227998.html 对于威胁检测算法使用神经网络训练有用!!!TODO待实验

- /**
- * Created by lkl on 2017/7/21.
- */
- //import com.ibm.spark.exercise.util.LogUtils
- //import com.ibm.spark.exercise.util.LogUtils
- import org.apache.spark.ml.Pipeline
- import org.apache.spark.ml.classification.MultilayerPerceptronClassifier
- import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
- import org.apache.spark.ml.feature.{IndexToString, StringIndexer, Word2Vec}
- import org.apache.spark.sql.SQLContext
- import org.apache.spark.{SparkContext, SparkConf}
- import org.apache.spark.{SparkConf, SparkContext}
- import org.apache.spark.sql.SQLContext
- object mllib {
- final val VECTOR_SIZE = 1000
- // def main(args: Array[String]) {
- // if (args.length < 1) {
- // println("Usage:SMSClassifier SMSTextFile")
- // sys.exit(1)
- // }
- def main(args: Array[String]) {
- val conf = new SparkConf().setMaster("local").setAppName("test")
- val sc = new SparkContext(conf)
- val sqlContext = new org.apache.spark.sql.SQLContext(sc)
- // val role = "jdbc:mysql://192.168.0.37:3306/emotional?user=root&password=123456&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false"
- // import sqlContext.implicits._
- // val df = sc.textFile("hdfs://192.168.0.211:9000/user/hadoop/emotion/SMS.txt").map(line=>(line.split(" ")(0),line.split(" ")(1),line.split(" ")(2),line.split(" ")(3))).toDF("id","innserSessionid","words","value")
- // df.printSchema()
- // df.insertIntoJDBC(role, "SMS", true)
- val sqlCtx =new org.apache.spark.sql.SQLContext(sc)
- import sqlContext.implicits._
// 读取hdfs 数据源,格式如下:以空格隔开,最后一列数字列是分析标题后,人为打上的标签,
值是按照情绪程度,值选择于【-1,-0.75,-0.5,-0.25,,0.25,0.50,0.75,1】其中之一。
- // 10090 C779C882AA39436A89C463BCB406B838 涨停板,复盘,全,靠,新,股,撑,门面,万科,A,尾盘,封板 0.75
- // 10091 519A9C6AD0A845298B0B3924117C0B4F 一,行业,再现,重大,利好,板块,反弹,仍,将,继续 0.75
- // 10092 C86CEC7DB9794311AF386C3D7B0B7CBD 藁城区,3,大,项目,新,获,规划证,开发,房企,系,同,一家 0
- // 10093 FCEA2FFC1C2F4D6C808F2CBC2FF18A8C 完善,对,境外,企业,和,对外,投资,统计,监测 0.5
- // 10094 204A77847F03404986331810E039DFC2 财联社,电报 0
- // 10095 E571B9EF451F4D5F8426A1FA06CD9EE6 审计署,部分,央企,业绩,不,实 -0.5
- // 10096 605264A2F6684CC4BB4B2A0B6A8FA078 厨卫,品牌,新,媒体,榜,看看,谁家,的,官微,最,爱,卖萌 0.25
- val parsedRDD = sc.textFile("hdfs://192.168.0.211:9000/user/hadoop/emotion/SMS.txt").map(line=>{
val a = line.split(" ")
if(a.length == 4 ){
(line.split(" ")(3),line.split(" ")(2).split(","))
}else{
("","".split(","))
}
})
- val msgDF = sqlCtx.createDataFrame(parsedRDD).toDF("label","message")
val labelIndexer = new StringIndexer().setInputCol("label").setOutputCol("indexedLabel").fit(msgDF)
val word2Vec = new Word2Vec().setInputCol("message").setOutputCol("features").setVectorSize(VECTOR_SIZE).setMinCount(1)- val layers = Array[Int](VECTOR_SIZE,250,500,200)
val mlpc = new MultilayerPerceptronClassifier().setLayers(layers).setBlockSize(512).setSeed(1234L).setMaxIter(128).setFeaturesCol("features").setLabelCol("indexedLabel").setPredictionCol("prediction")- val labelConverter = new IndexToString().setInputCol("prediction").setOutputCol("predictedLabel").setLabels(labelIndexer.labels)
- val Array(trainingData, testData) = msgDF.randomSplit(Array(0.8, 0.2))
val pipeline = new Pipeline().setStages(Array(labelIndexer,word2Vec,mlpc,labelConverter))
val model = pipeline.fit(trainingData)
val predictionResultDF = model.transform(testData)
//below 2 lines are for debug use
predictionResultDF.printSchema
predictionResultDF.select("message","label","predictedLabel").show(30)
val evaluator = new MulticlassClassificationEvaluator().setLabelCol("indexedLabel").setPredictionCol("prediction").setMetricName("precision")
val predictionAccuracy = evaluator.evaluate(predictionResultDF)
println("Testing Accuracy is %2.4f".format(predictionAccuracy * 100) + "%")
// sc.stop- }
}

结果如下:

- +--------------------+-----+--------------+
- | message|label|predictedLabel|
- +--------------------+-----+--------------+
- |[价格会, 一飞, 冲天, 神秘,...| 0.5| 0.5|
- |[审计署, 部分, 央企, 业绩,...| -0.5| 0.5|
- |[广电, 总局, 新浪, 微博, ...| -0.5| 0.5|
- |[叶檀, 若, 粤, 港澳湾区, ...| 0.25| 0.5|
- | [万达, 崩, 万科, 起]| 0| 0.5|
- |[外汇, 小白, 必, 看, 视频...| 0.25| 0.5|
- |[乐视, 回, 应发, 不, 出,...|-0.75| 0.5|
- |[万达, 电影, 高开, 1.69...| 0.5| 0.5|
- |[万科, A, 股, 6月, 23...| 0.75| 0.5|
- |[金价, 周一, 反弹, 扭转, ...| 0.5| 0.5|
- |[收评, 两, 市, 震荡, 沪指...| 0.25| 0.5|
- |[点睛, 军工, 混改, 加速, ...| 0.5| 0.5|
- |[棉花, 日报, 棉花, 短期, ...| 0.25| 0.5|
- |[探秘, 巴铁, 试验线, 部分,...|-0.75| 0.5|
- |[万达, 复星, 股价, 暴跌, ...|-0.75| 0.5|
- |[油价, 迎, 年内, 最, 大,...|-0.25| 0.5|
- |[2017年, IPO, 被, 否...|-0.75| 0.5|
- |[股, 转, 监事长, 邓映翎, ...| -0.5| 0.5|
- |[发改委, 国内, 汽, 柴油, ...|-0.25| 0.5|
- |[周报, 明晟, MSCI, 宣布...| 0.5| 0.5|
- |[夏季, 达沃斯, 共识, 中国,...| 0.5| 0.5|
- |[重磅, 又, 一, 家, 公司,...|-0.75| 0.5|
- |[麦格里, 重磅, 警告, OPE...| -0.5| 0.5|
- |[韩国, 娱乐, 公司, TO-W...| 0.5| 0.5|
- | [新, 三, 板, 周报]| 0| 0.5|
- |[分享, 华尔街, 对, 美国, ...| 0.5| 0.5|
- |[盛和, 资源, 2015年, 公...| 0| 0.5|
- |[交易, 实况, 黄金, 两, 连...| -0.5| 0.5|
- |[徽商, 银行, 内斗戏, 第二,...| -0.5| 0.5|
- |[2017, 夏季, 达沃斯, 论...| 0.25| 0.5|

spark scala word2vec 和多层分类感知器在情感分析中的实际应用的更多相关文章
- Spark mllib多层分类感知器在情感分析中的实际应用
import org.apache.spark.ml.Pipeline import org.apache.spark.ml.classification.MultilayerPerceptronCl ...
- 【2008nmj】Logistic回归二元分类感知器算法.docx
给你一堆样本数据(xi,yi),并标上标签[0,1],让你建立模型(分类感知器二元),对于新给的测试数据进行分类. 要将两种数据分开,这是一个分类问题,建立数学模型,(x,y,z),z指示[0,1], ...
- 数据算法 --hadoop/spark数据处理技巧 --(13.朴素贝叶斯 14.情感分析)
十三.朴素贝叶斯 朴素贝叶斯是一个线性分类器.处理数值数据时,最好使用聚类技术(eg:K均值)和k-近邻方法,不过对于名字.符号.电子邮件和文本的分类,则最好使用概率方法,朴素贝叶斯就可以.在某些情况 ...
- 机器学习:Python实现单层Rosenblatt感知器
如果对Rosenblatt感知器不了解,可以先查看下相关定义,然后对照下面的代码来理解. 代码中详细解释了各步骤的含义,有些涉及到了数学公式的解释. 这篇文章是以理解Rosenblatt感知器的原理为 ...
- 感知器(Perception)
感知器是一种早期的神经网络模型,由美国学者F.Rosenblatt于1957年提出.感知器中第一次引入了学习的概念,使人脑所具备的学习功能在基于符号处理的数学到了一定程度模拟,所以引起了广泛的关注. ...
- 情感分析的现代方法(包含word2vec Doc2Vec)
英文原文地址:https://districtdatalabs.silvrback.com/modern-methods-for-sentiment-analysis 转载文章地址:http://da ...
- 使用Spark MLlib进行情感分析
使用Spark MLlib进行情感分析 使用Spark MLlib进行情感分析 一.实验说明 在当今这个互联网时代,人们对于各种事情的舆论观点都散布在各种社交网络平台或新闻提要 ...
- Spark Multilayer perceptron classifier (MLPC)多层感知器分类器
多层感知器分类器(MLPC)是基于前馈人工神经网络(ANN)的分类器. MLPC由多个节点层组成. 每个层完全连接到网络中的下一层. 输入层中的节点表示输入数据. 所有其他节点,通过输入与节点的权重w ...
- MLPclassifier,MLP 多层感知器的的缩写(Multi-layer Perceptron)
先看代码(sklearn的示例代码): from sklearn.neural_network import MLPClassifier X = [[0., 0.], [1., 1.]] y = [0 ...
随机推荐
- WinServer-IIS-Dynamic IP Restrictions
动态IP限制 来自为知笔记(Wiz)
- 使用excel进行数据挖掘(6)---- 预測
在配置环境后,能够使用excel进行数据挖掘. 环境配置问题可參阅: http://blog.csdn.net/xinxing__8185/article/details/46445435 例子 DM ...
- iOS企业证书网页分发全过程具体解释(图文并茂史无前例的具体哦)
iOS企业证书网页分发全过程具体解释 苹果的企业级证书公布的应用.是不用设备授权就可以直接安装,而且不限设备上限. 为了方便分发,苹果有协议实现通过网页链接直接下载安装企业级的应用. 首先须要说明它的 ...
- javascript 获取指定范围随机数
<script type="text/javascript"> function GetRandomNum(Min,Max){ var Range = Max - Mi ...
- bzoj3436: 小K的农场(差分约束)
3436: 小K的农场 题目:传送门 题解: 查分基础: t==1 a>=b+c t==2 b>=a-c t==3 a>=b+0 b>=a+0 跑最长路一A 代码: #i ...
- apiCloud中api.ajax方法跨域传参获取数据
apiCloud中的ajax方法,可以自动处理跨域访问数据,不必使用jsonp来处理了. 使用ajax方法,必须要在apiready = function() {}方法中 获取参数 var pageP ...
- css文字换行问题white-space:pre-line或者white-space:pre-wrap,解决word-wrap:break-word解决不了的
想让文字换行必须要写的那几个css样式就略过了.当一行文字是数字或字母时或者数字字母组合时会出现不换行局面,这时候加个word-wrap:break-word:就基本可以解决但是有种情况是它解决不了的 ...
- 如何显示bootstrap fileinput缩略图上面的删除按钮
bootstrap上传文件控件初始化js: //bootstrap上传文件控件 $(".fileupload").fileinput({ language: "zh&qu ...
- hiho160周 - 字符串压缩,经典dp
题目链接 小Hi希望压缩一个只包含大写字母'A'-'Z'的字符串.他使用的方法是:如果某个子串 S 连续出现了 X 次,就用'X(S)'来表示.例如AAAAAAAAAABABABCCD可以用10(A) ...
- mybastis_20190323
1 数据表 items.user.orders.orderdetail user id,username,birthday,sex,address; 使用原生态的jdbc的问题总结? 1 数据库链接问 ...