ldajava的简单介绍
本篇文章给大家谈谈ldajava,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
java编写一个应用程序,接收用户输入的一行字符串,统计字符个数符串反序输出
import java.awt.event.ActionEvent;
import java.awt.*;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
testJFrame frame=new testJFrame();
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
class testJFrame extends JFrame{
private JTextField text1;
private JTextField text2;
private JTextField text3;
private JButton button;
private JPanel panel;
private static final int WIDTH=300;
private static final int HEIGHT=300;
public testJFrame(){
setTitle("test");
setSize(WIDTH,HEIGHT);
text1=new JTextField(12);
text2=new JTextField(12);
text3=new JTextField(12);
button=new JButton("确定");
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
String str=text1.getText();
text2.setText(""+str.length());
for(int i=str.length()-1;i=0;i--){
text3.setText(text3.getText()+str.charAt(i));
}
}
});
panel=new JPanel();
panel.add(text1);
panel.add(text2);
panel.add(text3);
panel.add(button);
add(panel);
}
}
因为写的比较赶,所以做的比较粗糙,不过你要的功能都有实现。
如何使用mahout对文档进行lda主题分析
利用sqoop将数据从MySQL导入到HDFS中,利用mahout的LDA的cvb实现对输入数据进行聚类,并将结果更新到数据库中。数据流向图如下
mahout算法分析
输入数据格式
为IntegerWritable, VectorWritable的matrix矩阵,key为待聚类文本的数字编号,value为待聚类文本的单词向量Vector, Vector的index为单词在字典中的编号, value为TFIDF值。
算法相关参数详解(不包含hadoop运行参数)
项目中所有参数设置均与mahout-0.9目录下的examples/bin/cluster-reuters.sh的147-172行设置一样,即
$SCOUT cvb -i ${WORK_DIR}/${ROWID_MATRIX_DIR}/matrix -o ${WORK_DIR}/${LDA_DIR} -k 20 -ow -x 20 -dict ${WORK_DIR}/${DICTIONARY_FILES} -dt ${WORK_DIR}/${LDA_TOPICS_DIR} -mt ${WORK_DIR}/${LDA_MODEL_DIR}
input -- 输入数据的hdfs路径,这里是/home/hadoop-user/scout_workspace/scout/dataset/reuters-out-matrix-debug/matrix
dt -- 文档主题输出路径,保存了每个文档的相应topic的概率,这里是/home/hadoop-user/scout_workspace/scout/dataset/reuters-lda-topics
mt -- model的路径,这里是/home/hadoop-user/scout_workspace/scout/dataset/reuters-lda-debug
k -- number of topics to learn,这里设置成20
x -- 模型迭代次数,也就是需要多少次迭代来生成最后的Model,默认值20
seed -- Random seed,生成初始readModel时的种子,默认值System.nanoTime() % 10000
dict -- 字典路径,这里是/home/hadoop-user/scout_workspace/scout/dataset/reuters-out-seqdir-sparse-lda/dictionary.file-*
a -- Smoothing for document/topic distribution, document/topic分布的平滑系数,默认为1.0E-4
e -- Smoothing for topic/term distribution, topic/term分布的平滑系数,默认为1.0E-4
关于a和e,根据描述,a和e的合适取值为k/50(k为topic数量),但是这个网页还保留着mahout ldatopics的命令介绍,而mahout 0.8,0.9均没有该命令,推测应该是比较陈旧的内容,因此还是根据cluster-reuters.sh中的设置来,也就是采取默认值。
mipd -- 这个参数非常重要,对于每个文档程序是先用RandomSeed来生成一个初始的readModel然后进行mipd次迭代,算出最终的model进行更新,这里选默认值10次
LDA算法程序分析
算法的大致流程如下
1.解析参数与Configuration设置
2.读取Model(第一次运行时没有这个过程)
如果hfds上面已经有部分model,那么程序将读取最后一个model,并以这个model作为初始readModel来继续进行算法迭代,也就是说有类似于断电-重启的机制
3.运行算法迭代(Mapper过程)生成LDA模型
这个过程是最为复杂的阶段,许多地方我也不是很明白,我将尽最大努力进行解释
首先分析Mapper,即CachingCVB0Mapper,顾名思义就是能够缓存的Mapper,表现在其readModel的选取上面,如果目录里面不存在任何model则用RandomSeed初始化一个readModel,否则读取最近的一个model。程序将model划分为readModel和writeModel,这两个都是TopicModel类,并由ModelTrainer来进行调度和管理
CachingCVB0Mapper整个过程如下图所示(清晰大图见附件)
在上面这个整体框架下,mahout程序应用了CVB0 Algorithm来计算LDA模型, 在map过程中通过对向量docTopic和矩阵docTopicModel的反复迭代求解,算出每个document的docTopicModel并且在update writeModel阶段将docTopicModel矩阵进行向量的相加操作,经历完所有的map过程后得到整个corpus的docTopicModel矩阵,最终在cleanup过程中将topic的index作为key,矩阵docTopicModel作为value写入reduce。该过程涉及到的算法如下所示
CVB0算法分析图解(清晰大图见附件)
4.利用生成的LDA模型推导出topic的概率分布
算法总结
可以看出算法本质上面就是bayes公式和EM算法的结合
E过程就是首先假定一个均匀分布且归一化的topic概率分布向量docTopics,利用该值通过贝叶斯公式算出单词 - 主题的概率分布矩阵 docTopicModel(见CVB0算法分析图解中的第一步)
M过程就是根据生成的docTopicModel进行CVB0算法分析图解中的2,3,4,5步重新计算得到新的docTopics
然后反复重复 E - M 过程n次,得到收敛后的docTopics和docTopicModel,其中docTopicModel可以用于lda模型的更新,而docTopics就是我们聚类需要的topic概率分布向量
算法后记
几点问题还没有得到解决
1.在mahout中是按照下面的式子计算docTopicModel的
double termTopicLikelihood =
(topicTermRow.get(termIndex) + eta) * (topicWeight + alpha)/ (topicSum + eta * numTerms);
疑问就是该式子比贝叶斯公式添加了几个平滑系数项,这样写的理论依据在哪里,来源于哪篇著作或者论文,平滑系数eta和alpha分别是代表什么含义,如何选取这两个系数。
2.CVB0算法分析图解中第2步进行归一化的理论依据,即为什么要进行归一化
3.update writeModel过程中对于topicTermCounts的计算
即为什么要在每次map时候对p(topic | term)进行累加,还没有完全想明白
项目运行环境
hadoop-1.2.1
sqoop-1.4.4
mahout-0.9
关于环境的安装部署请参考相关文章,这里不多加赘述。上面三个软件在我本机的都是部署在/home/hadoop-user/mahout_workspace/目录下。另外自己写的scout项目部署在/home/hadoop-user/scout_workspace/目录下
项目代码
项目代码已经放到Github上有兴趣的同学可以下载下来看下,重点查看bin目录下的脚本文件以及driver,export,analyzer等几个包下的java文件
整个项目架构分析
该项目的初始数据保存在MySQL中, 算法分析需要map/reduce过程以及hdfs文件系统的参与, 最后将结果更新至MySQL,整个过程如图所示
java 的复制问题
输入 syso 之后 alt + / 就会快速帮你补全!
复制一行的快捷键是 选中要被复制的行 ctrl + alt + 上下 键
人工智能需要什么基础?
门槛一、数学基础
我们应该了解过,无论对于大数据还是对于人工智能而言,其实核心就是数据,通过整理数据、分析数据来实现的,所以数学成为了人工智能入门的必修课程!
数学技术知识可以分为三大学科来学习:
1、线性代数,非常重要,模型计算全靠它~一定要复习扎实,如果平常不用可能忘的比较多;
2、高数+概率,这俩只要掌握基础就行了,比如积分和求导、各种分布、参数估计等等。
提到概率与数理统计的重要性,因为cs229中几乎所有算法的推演都是从参数估计及其在概率模型中的意义起手的,参数的更新规则具有概率上的可解释性。对于算法的设计和改进工作,概统是核心课程,没有之一。当拿到现成的算法时,仅需要概率基础知识就能看懂,然后需要比较多的线代知识才能让模型高效的跑起来。
3、统计学相关基础
回归分析(线性回归、L1/L2正则、PCA/LDA降维)
聚类分析(K-Means)
分布(正态分布、t分布、密度函数)
指标(协方差、ROC曲线、AUC、变异系数、F1-Score)
显著性检验(t检验、z检验、卡方检验)
A/B测试
门槛二、英语水平
我这里说的英语,不是说的是英语四六级,我们都知道计算机起源于国外,很多有价值的文献都是来自国外,所以想要在人工智能方向有所成就,还是要读一些外文文献的,所以要达到能够读懂外文文献的英语水平。
门槛三、编程技术
首先作为一个普通程序员,C++ / Java / Python 这样的语言技能栈应该是必不可少的,其中 Python 需要重点关注爬虫、数值计算、数据可视化方面的应用。
ldajava的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、ldajava的信息别忘了在本站进行查找喔。