转自: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 和多层分类感知器在情感分析中的实际应用的更多相关文章

  1. Spark mllib多层分类感知器在情感分析中的实际应用

    import org.apache.spark.ml.Pipeline import org.apache.spark.ml.classification.MultilayerPerceptronCl ...

  2. 【2008nmj】Logistic回归二元分类感知器算法.docx

    给你一堆样本数据(xi,yi),并标上标签[0,1],让你建立模型(分类感知器二元),对于新给的测试数据进行分类. 要将两种数据分开,这是一个分类问题,建立数学模型,(x,y,z),z指示[0,1], ...

  3. 数据算法 --hadoop/spark数据处理技巧 --(13.朴素贝叶斯 14.情感分析)

    十三.朴素贝叶斯 朴素贝叶斯是一个线性分类器.处理数值数据时,最好使用聚类技术(eg:K均值)和k-近邻方法,不过对于名字.符号.电子邮件和文本的分类,则最好使用概率方法,朴素贝叶斯就可以.在某些情况 ...

  4. 机器学习:Python实现单层Rosenblatt感知器

    如果对Rosenblatt感知器不了解,可以先查看下相关定义,然后对照下面的代码来理解. 代码中详细解释了各步骤的含义,有些涉及到了数学公式的解释. 这篇文章是以理解Rosenblatt感知器的原理为 ...

  5. 感知器(Perception)

    感知器是一种早期的神经网络模型,由美国学者F.Rosenblatt于1957年提出.感知器中第一次引入了学习的概念,使人脑所具备的学习功能在基于符号处理的数学到了一定程度模拟,所以引起了广泛的关注. ...

  6. 情感分析的现代方法(包含word2vec Doc2Vec)

    英文原文地址:https://districtdatalabs.silvrback.com/modern-methods-for-sentiment-analysis 转载文章地址:http://da ...

  7. 使用Spark MLlib进行情感分析

    使用Spark MLlib进行情感分析             使用Spark MLlib进行情感分析 一.实验说明 在当今这个互联网时代,人们对于各种事情的舆论观点都散布在各种社交网络平台或新闻提要 ...

  8. Spark Multilayer perceptron classifier (MLPC)多层感知器分类器

    多层感知器分类器(MLPC)是基于前馈人工神经网络(ANN)的分类器. MLPC由多个节点层组成. 每个层完全连接到网络中的下一层. 输入层中的节点表示输入数据. 所有其他节点,通过输入与节点的权重w ...

  9. MLPclassifier,MLP 多层感知器的的缩写(Multi-layer Perceptron)

    先看代码(sklearn的示例代码): from sklearn.neural_network import MLPClassifier X = [[0., 0.], [1., 1.]] y = [0 ...

随机推荐

  1. jquery在文本框之后添加红*

    var addHtml="<span class='text_red'>*</span>";function req(re){ if(re.parent(& ...

  2. shell如何更改当前工作路径

    转载: http://imysqldba.blog.51cto.com/1222376/616805 shell 脚本执行有三种方法 bash 脚本名 sh 脚本名 chmod +x 脚本名 使用下面 ...

  3. volley源代码解析(六)--HurlStack与HttpClientStack之争

    Volley中网络载入有两种方式,各自是HurlStack与HttpClientStack.我们来看Volley.java中的一段代码 if (stack == null) {//假设没有限定stac ...

  4. CC2540/CC2541 : Set the Peripheral Being Advertising while It is Being Connected

    There is possible to set your CC254X be scanable when it is in connection. But, based on my test,the ...

  5. [iOS]字符串转字典

    有点时候,我们json中有post请求的网址,这个时候我们须要把网址字符串转换成body体 字典   放在post请求中 NSString *body = [self.url_C_ component ...

  6. HDU 5616 Jam's balance 背包DP

    Jam's balance Problem Description Jim has a balance and N weights. (1≤N≤20)The balance can only tell ...

  7. Document properties

    http://devnet.kentico.com/docs/7_0/devguide/index.html?document_properties_overview.htm You can edit ...

  8. 使用Networkx进行图的相关计算——黑产集团挖掘,我靠,可以做dns ddos慢速攻击检测啊

    # -*- coding: utf-8 -*- import networkx as nx import matplotlib.pyplot as plt iplist={} goodiplist={ ...

  9. 10:Challenge 3(树状数组直接修改)

    总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  262144kB 描述 给一个长为N的数列,有M次操作,每次操作是以下两种之一: (1)修改数列中的一个数 (2)求 ...

  10. 解码URLDecode和编码URLEnCode

    在前台往后台传递参数的时候,在前台进行编码,在后台接收参数的时候,用Decode进行解码: 如果url中包含特殊字符如:&.html标签 <tr><td>等导致url无 ...