java机器学习算法_机器学习算法 java - CSDN
  • 虽然在机器学习中,Python是人工智能从业者使用最多的编程语言,但是,Java 在项目开发中仍然发挥着不可替代的作用,而且许多流行的机器学习框架本身就是 Java编写的。Python 的资料到处都是,而 Java 相关的资料就...

    导读:机器学习是目前盛行于世的技术之一,这几年一时风头无两。虽然在机器学习中,Python是人工智能从业者使用最多的编程语言,但是,Java 在项目开发中仍然发挥着不可替代的作用,而且许多流行的机器学习框架本身就是 Java编写的。Python 的资料到处都是,而 Java 相关的资料就相对少了很多。今天我们翻译了 Fatema Patrawala> 撰写的《六大最常用的 Java 机器学习库一览》。

    MLOSS.org 网站上,列出了 70 多个基于 Java 的开源机器学习项目,可能还有更多未列出的项目,存于大学里的服务器、GitHub 或 Bitbucket 中。我们将在本文中回顾 Java 中的主流机器学习库和平台,它们能够解决的问题类型,支持的算法以及可以使用的数据类型。

    本文节选自 Machine learning in Java,由 Bostjan Kaluza 编写,Packt Publishing Ltd. 出版

    Weka

    Weka 是 Waikato Environment for Knowledge Analysis(Waikato 智能分析环境)的缩写,是新西兰 Waikato 大学开发的机器学习库,也可能是最为有名的 Java 库。Weka 是一个通用的库,能够解决各种机器学习任务,如分类、回归和聚类。它具有丰富的图形用户界面、命令行界面和 Java API。有关 Weka 更多详情,请参阅:http://www.cs.waikato.ac.nz/ml/weka/

    截止到本书写作之时,Weka 总共包含 267 个算法,其中:数据预处理(82),属性选择(33),分类和回归(133),聚类(12),关联规则挖掘(7)。图形界面非常适合用于探索数据,而 Java API 可以让你开发新的机器学习方案并在应用中使用这些算法。
    在这里插入图片描述
    Weka 是在 GNU 通用公共许可证(GNU GPL)下发布的,这意味着你可以复制、分发和修改它,只要你跟踪源文件中的更改并将其保存在 GNU GPL 下。你甚至可以进行商业分发,但前提是你必须公开源代码或获得商业许可证。

    除了几种支持的文件格式外,Weka 还提供了自己的默认数据格式 ARFF,用于通过属性 - 数据对描述数据。它由两部分组成:第一部分包含标题头,它指定所有属性(即特性)及其类型;例如,标称、数字、日期和字符串。第二部分包含数据,其中每行对应于一个实例。标题头中的最后一个属性隐式地被视为目标变量,缺失的数据用问号标记。例如,用 ARFF 文件格式编写的 Bob 实例如下:

        @RELATION person_dataset
        
        @ATTRIBUTE `Name`  STRING
        @ATTRIBUTE `Height`  NUMERIC
        @ATTRIBUTE `Eye color`{blue, brown, green}
        @ATTRIBUTE `Hobbies`  STRING
        
        @DATA
        'Bob', 185.0, blue, 'climbing, sky diving'
        'Anna', 163.0, brown, 'reading'
        'Jane', 168.0, ?, ?
    

    该文件由三个部分组成。第一部分以 @relation 关键字开始,指定数据集名称。下一部分以 @ATTRIBUTE 关键字开始,后面是属性名和类型。可用的类型是 STRING(字符串)、NUMERIC(数字)、DATE(日期)和一组分类值。最后一个属性被隐式假设为我们想要预测的目标变量。最后一部分以 @DATA 关键字开始,每行后面跟着一个实例。实例值用逗号分隔,并且必须遵循与第二部分中的属性相同的顺序。

    Weka 的 Java API 由以下的顶层包组成:

    • weka.associations:这些是关联规则学习的数据结构和算法,包括 Apriori、 predictive apriori、FilteredAssociator、FP-Growth、Generalized Sequential Patterns (GSP)、Hotspot 和 Tertius。

    • weka.classifiers:这些是监督学习算法、评估期和数据结构。该包由以下几个部分组成:

      • weka.classifiers.bayes:它实现了贝叶斯(Bayesian)方法,包括朴素贝叶斯、贝式网络、贝叶斯逻辑回归等。

      • weka.classifiers.evaluation:这些是评价统计、混淆矩阵、ROC 曲线等标称和数值预测的监督评价算法。

      • weka.classifiers.functions:这些是回归算法,包括线性回归、保序回归、高斯过程、支持向量机、多层感知器、表决感知器等。

      • weka.classifiers.lazy:这些是基于实例的算法,比如 k- 最近邻、K*,惰性贝叶斯规则。

      • weka.classifiers.meta:这些是监督学习元算法,包括 AdaBoost、bagging、加性回归、随机委员会(random committee)等。

      • weka.classifiers.mi:这些是多实例算法,如 Citation-KNN、多样性密度、MI AdaBoost 等。

      • weka.classifiers.rules:这些是基于变治法(separate-and-conquer)、Ripper、Part、Prism 的决策表和决策规格。

      • weka.classifiers.trees:这些是各种决策树算法,包括 ID3、C4.5、M5、功能树、逻辑树、随机森林等。

    • weka.clusterers:这些是聚类算法,包括 k-means、Clope、Cobweb、DBSCAN 层次聚类、Farthest 等

    • weka.core:这些是各种实用类、数据表示、配置文件等。

    • weka.datagenerators:这些是用于分类、回归和聚类算法的数据生成器。

    • weka.estimators:这些是用于离散 / 标称域、条件概率估计等的各种数据分布估计。

    • weka.experiment:这是一组类,支持运行实验所需的配置、数据集、模型设置和统计信息。

    • weka.filters:这些是基于属性和基于实例的选择算法,用于监督和非监督数据预处理。

    • weka.gui:这些是实现 Explorer、Experimenter、和 Knowledge Flow 的图形界面。Explorer 允许你调查数据集、算法及其参数,并使用散点图和其他可视化的形式对数据集进行可视化。Experimenter 用于设计批量实验,但它只能用于分类和回归问题。Knowledge Flow 实现了可视化的拖放式用户界面来构建数据流,如:加载数据、应用过滤器、构建分类器和评估。

    用于机器学习的 Java-ML

    Java 机器学习库(Java-ML)是一组机器学习算法的集合,具备用于相同类型的算法的公共接口。它只提供 Java API,因此,它主要面向的是软件工程师和程序员。Java-ML 包含用于数据预处理、特征选择、分类和聚类的算法。此外,它还提供了几个 Weka 桥来直接通过 Java-ML API 访问 Weka 的算法。Java-ML 可从 http://java-ml.sourceforge.net 下载,截至本书完成之际,最近版本发布于 2012 年。
    在这里插入图片描述
    Java-ML 也是一个通用机器学习库。与 Weka 相比,它提供了更为一致的接口和最新算法的实现,在其他包中不存在这些算法,如一系列最先进的相似性度量和特征选择技术等,这些包含动态时间规整、随机森林属性评估等等。Java-ML 也可以在 GNU GPL 许可证下使用。

    Java-ML 支持任何类型的文件,只要它每行包含一个数据样本,并且特征用逗号、分号和制表符分隔。

    Java-ML 库由以下顶层包组成:

    • net.sf.javaml.classification:这些是分类算法,包括朴素贝叶斯、随机森林、Bagging、自组织映射、k- 最近邻等。

    • net.sf.javaml.clustering:这些是聚类算法,包括 kmeans、自组织映射、空间聚类、Cobweb、AQBC 等。

    • net.sf.javaml.core:这些表示实例和数据集。

    • net.sf.javaml.distance:这些是测量实例距离和相似度的算法,如切比雪夫距离(Chebyshev distance)、余弦距离 / 相似度、欧几里得距离(Euclidian distance)、杰卡德距离(Jaccard distance)/ 相似度、马氏距离(Mahalanobis distance)、曼哈顿距离(Manhattan distance)、明氏距离(Minkowski distance)、皮尔逊积矩相关系数(Pearson correlation coefficient)、斯皮尔曼简捷距离(Spearman’s footrule distance)、动态时间规整(dynamic time wrapping,DTW)等。

    • net.sf.javaml.featureselection:这些是用于特征评估、评分、选择和排名的算法,如增益比、ReliefF、Kullback-Liebler 散度、对称不确定性等。

    • net.sf.javaml.filter:这些是通过过滤、删除属性、设置类或属性值等操作实例的方法。

    • net.sf.javaml.matrix:实现内存或基于文件的数组。

    • net.sf.javaml.sampling:实现选择数据集子集的采样算法。net.sf.javaml.tools:这些是关于数据集、实例操作、序列化、Weka API 接口等的使用方法。

    • net.sf.javaml.utils:这些是算法的实用方法,如统计、数学方法、列联表等表等。

    Apache Mahout

    Apache Mahout 项目旨在构建可扩展的机器学习库。它是在可扩展分布式体系结构(如 Hadoop)上构建的,实用 MapReduce 范例,这是一种实用服务器集群处理和生成具有并行分布式算法的大型数据及的方法。
    在这里插入图片描述
    Mahout 提供了控制台界面和 Java API,可用于聚类、分类和写作过滤的可扩展算法。它可以解决这三个业务问题:项目推荐,如向喜欢某部电影的人推荐其他可能喜欢的电影;聚类,如将文本文档分组与主题相关的文档组中归档;分类,如学习将哪个主题分配给未标记的文档。

    Mahout 是在商业化的 Apache 许可证下分发的,这意味着只要你保留 Apache 许可证并将其显示在程序的版权声明中,你就可以使用它。

    Mahout 提供了以下库:
    org.apache.mahout.cf.taste:这些是基于用户和基于项目的协同过滤算法,及基于 ALS 的矩阵分解算法。

    • org.apache.mahout.classifier:这些是内存和分布式实现,包括逻辑回归、朴素贝叶斯、随机森林、隐马尔科夫模型(hidden Markov models,HMM)和多层感知器。

    • org.apache.mahout.clustering:这些是聚类算法,例如 Canopy 聚类、k-means、模糊 k-means、流式 K-means 和谱聚类。

    • org.apache.mahout.common:这些是算法的实用方法,包括距离、MapReduce 操作、迭代器等。

    • org.apache.mahout.driver:实现了通用驱动程序来运行其他类的主要方法。

    • org.apache.mahout.ep:这是使用记录步骤突变的进化优化。

    • org.apache.mahout.math:这些是 Hadoop 中的各种数据额实用方法和实现。

    • org.apache.mahout.vectorizer:这些是用于数据表示、操作和 MapReduce 任务的类。

    Apache Spark

    Apache Spark(或简称 Spark)是在 Hadoop 上构建大规模数据处理的平台,但与 Mahout 不同的是,它与 MapReduce 范式无关。相反,它使用内存缓存提取工作数据集,对其进行处理并重复查询。据报道,Spark 直接处理磁盘存储数据的速度是 Mahout 实现的十倍。可从 https://spark.apache.org 下载。
    在这里插入图片描述
    在 Spark 之上构建了许多模块,例如用于图形处理的 GraphX、用于处理实时数据流的 Spark Streaming 和用于机器学习库的 MLlib,这些模块具有分类、回归、协同过滤、聚类、降维和优化。

    Spark 的 MLlib 可以使用基于 Hadoop 的数据源,例如 Hadoop 分布式文件系统(HDFS)或 HBase,以及本地文件。支持的数据类型包括以下几种:

    • 局部向量存储在一台机器上。稠密向量表示为双类型值数组,如 (2.0,0.0,10.,0.0);而稀疏向量由向量的大小、索引数组和值数组表示,如 [4, (0, 2), (2.0, 1.0)]。

    • 标记点用于监督学习算法,由局部向量组成,用双类型的类值标记。标签可以是类索引、二进制结果或多个类索引的列表(多类分类)。例如,标记的稠密向量表示为 [1.0, (2.0, 0.0, 1.0, 0.0)]。

    • 局部矩阵在单台机器上存储稠密矩阵。它由矩阵维数和以列主序排列的单个双数组定义。

    • 分布式矩阵对存储在 Spark 的弹性分布式数据集(Resilient Distributed Dataset,RDD)中的数据进行操作,RDD 表示可以并行操作的元素集合。有三种表示:行矩阵,其中每一行都是可以存储在一台机器上的局部向量,但行索引没有意义;索引行矩阵,类似于行矩阵,但行索引是有意义的,即可以识别行并执行行连接;坐标矩阵,当行不能存储在一台机器上,且矩阵非常稀疏时才使用。

    Spark 的 MLlib API 库提供了各种学习算法和实用工具的接口,如下所示:

    • org.apache.spark.mllib.classification:这些是二元和多类分类算法,包括线性 SVM、逻辑回归、决策树和朴素贝叶斯。

    • org.apache.spark.mllib.clustering:这些是 k-means 聚类。

    • org.apache.spark.mllib.linalg:这些是数据表示,包括稠密向量、稀疏向量和矩阵。

    • org.apache.spark.mllib.optimization:这是 MLlib 中作为低级基元的各种优化算法,包括梯度下降、随机梯度下降、分布式 SGD 的更新方案和有限内存 BFGS。

    • org.apache.spark.mllib.recommendation:这些是基于模型的协同过滤,通过交替最小二乘矩阵分解来实现。

    • org.apache.spark.mllib.regression:这些是回归学习算法,如线性最小二乘、决策树、Lasso 和 Ridge 回归。

    • org.apache.spark.mllib.stat:这些是稀疏或稠密向量格式的样本的统计函数,用于计算均值、方差、最小值、最大值、计数和非零计数。org.apache.spark.mllib.tree:实现了分类和回归决策树的算法。

    • org.apache.spark.mllib.util:这些是用于加载、保存、预处理、生成和验证数据的方法的集合。

    Deeplearning4j

    DeepLearning4j(或称 DL4J),是一个用 Java 编写的深度学习库。它具有分布式和单机深度学习框架,包括并支持各种神经网络结构,如前馈神经网络、RBM(Restricted Boltzmann Machine,受限玻尔兹曼机)、卷积神经网络、深度信念网络、自动编码器等。DL4J 可以解决不同的问题,比如识别面孔、声音、垃圾邮件和电子商务欺诈。

    Deeplearning4j 也是在 Apache 2.0 许可下分发的,可从 http://deeplearning4j.org 下载。该库由以下组成:

    • org.deeplearning4j.base:这些是加载类。

    • org.deeplearning4j.berkeley:这些是数学使用方法。

    • org.deeplearning4j.clustering:k-means 的聚类实现。

    • org.deeplearning4j.datasets:这是数据集的操作,包括导入、创建、迭代等。

    • org.deeplearning4j.distributions:这是用于分发的实用方法。

    • org.deeplearning4j.eval:这些是评估类,包括混淆矩阵。

    • org.deeplearning4j.exceptions:实现异常处理程序。

    • org.deeplearning4j.models:这些是监督学习算法,包括深度信念网络、堆叠式自动编码器、堆叠去噪式自动编码器和 RBM。

    • org.deeplearning4j.nn:这些是基于神经网络的组件和算法的实现,例如神经网络、多层网络、卷积多层网络等。

    • org.deeplearning4j.optimize:这些是神经网络优化算法,包括反向传播、多层优化、输出层优化等。

    • org.deeplearning4j.plot:这些是用于呈现数据的各种方法。

    • org.deeplearning4j.rng:这是一个随机数据生成器。

    • org.deeplearning4j.util:这些是帮助和实用方法。

    MALLET

    机器学习语言工作包(Machine Learning for Language Toolkit,MALLET),是一个包含自然语言处理算法和实用程序的大型库。它可以用于各种任务,如文档分类、分档聚类、信息提取和主题建模。MALLET 提供了命令行界面和 Java API,适用于多种算法,如朴素贝叶斯、HMM(Hidden Markov Model,隐马尔可夫模型)、隐含狄利克主题模型(Latent Dirichlet topic model)、逻辑回归和条件随机域(conditional random fields)。
    在这里插入图片描述
    MALLET 可以在通用公共许可证 1.0 下使用,这意味着你甚至可以在商业应用程序中使用它。可以从 http://mallet.cs.umass.edu 下载。MALLET 实例由名称、标签、数据和源表示。但是,有两种方法可以将数据导入到 MALLET 格式中,如下所示:

    • Instance per file:每个文件(即文档)对应一个实例,MALLET 接受输入的目录名。

    • Instance per line:每行对应一个实例,假设使用以下格式:instance_name 标签令牌。数据将是一个特征向量,由作为标记出现的不同单词和它们出现次数组成。

    该库由以下包组成:

    • cc.mallet.classify:这些是用于训练和分类实例的算法,包括 AdaBoost、Bagging、C4.5、以及其他决策树模型、多元逻辑回归、朴素贝叶斯和 Winnow2。

    • cc.mallet.cluster:这些是无监督聚类算法,包括贪心凝聚( greedy agglomerative)、爬山算法(hill climbing)、k-best 和 k-means 聚类。

    • cc.mallet.extract:实现分词器(tokenizers)、文档提取器、文档查看器和清理器等。

    • cc.mallet.fst: 实现了序列模型,包括条件随机域、HMM、最大熵马尔科夫模型(maximum entropy Markov models),以及相应的算法和评估器。

    • cc.mallet.grmm:实现了如推理算法、学习和测试的图形模型和因子图。例如环状信念传播(loopy belief propagation)、吉布斯采样(Gibbs sampling)等。

    • cc.mallet.optimize:这些是用于寻找函数最大值的优化算法,例如梯度上升、有限内存 BFGS、随机元上升(stochastic meta ascent)等。

    • cc.mallet.pipe:这些方法是将数据处理为 MALLET 实例中的管道。cc.mallet.topics:这些是主题建模算法,例如隐含狄利克分布(Latent Dirichlet allocation)、四级弹球分布(four-level pachinko allocation)、分层 PAM、DMRT 等。

    • cc.mallet.types:实现了基本数据类型,如数据集、特征向量、实例和标签。

    • cc.mallet.util:这些是各种实用工具功能,如命令行处理、搜索、数学、测试等。

    如果你想利用关键的 Java 机器学习库进行设计、构建和部署你自己的机器学习应用,请查阅 Packt Publishing 出版社出版的《Java 机器学习》(Machine Learning in Java)一书。

    转载自:https://hub.packtpub.com/most-commonly-used-java-machine-learning-libraries/#

    下一步阅读:

    5 JavaScript machine learning libraries you need to know

    A non programmer’s guide to learning Machine learning

    Why use JavaScript for machine learning?

    展开全文
  • 本列表总结了25个Java机器学习工具&库: Weka集成了数据挖掘工作的机器学习算法。这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用。Weka包括一系列的工具,如数据预处理、分类、回归、聚类、关联...

    本列表总结了25个Java机器学习工具&库:

    1. Weka集成了数据挖掘工作的机器学习算法。这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用。Weka包括一系列的工具,如数据预处理、分类、回归、聚类、关联规则以及可视化。

    2. Massive Online Analysis(MOA)是一个面向数据流挖掘的流行开源框架,有着非常活跃的成长社区。它包括一系列的机器学习算法(分类、回归、聚类、异常检测、概念漂移检测和推荐系统)和评估工具。关联了WEKA项目,MOA也是用Java编写的,其扩展性更强。

    3. MEKA项目提供了一个面向多标签学习和评价方法的开源实现。在多标签分类中,我们要预测每个输入实例的多个输出变量。这与“普通”情况下只涉及一个单一目标变量的情形不同。此外,MEKA基于WEKA的机器学习工具包。

    4. Advanced Data mining And Machine learning System(ADAMS)是一种新型的柔性工作流引擎,旨在迅速建立并保持真实世界的复杂知识流,它是基于GPLv3发行的。

    5. Environment for Developing KDD-Applications Supported by Index-Structure(ELKI)是一款基于Java的开源(AGPLv3)数据挖掘软件。ELKI主要集中于算法研究,重点研究聚类分析中的无监督方法和异常检测。

    6. Mallet是一个基于Java的面向文本文件的机器学习工具包。Mallet支持分类算法,如最大熵、朴素贝叶斯和决策树分类。

    7. Encog是一个先进的机器学习框架,集成了支持向量机(SVM)、人工神经网络、遗传算法、贝叶斯网络、隐马尔可夫模型(HMM)、遗传编程和遗传算法。

    8. Datumbox机器学习框架是一个用Java编写的开源框架,允许快速地开发机器学习和统计应用。该框架的核心重点包括大量的机器学习算法以及统计测试,能够处理中等规模的数据集。

    9. Deeplearning4j是使用Java和Scala编写的第一个商业级的、开源的、分布式深入学习库。其设计的目的是用于商业环境中,而不是作为一个研究工具。

    10. Mahout是一个内置算法的机器学习框架。Mahout-Samsara帮助人们创建他们自己的数学,并提供了一些现成的算法实现。

    11. Rapid Miner是德国多特蒙特技术大学开发的。它为开发者开发应用程序提供了一个GUI(图形用户界面)和Java API。它还提供了一些机器学习算法,用来做数据处理、可视化以及建模。

    12. Apache SAMOA是一个机器学习(ML)框架,内嵌面向分布式流ML算法的编程抽象,并且允许在没有直接处理底层分布式流处理引擎(DSPEe,如Apache Storm、Apache S4和Apache samza)复杂性的情况下,开发新的ML算法。用户可以开发分布式流ML算法,而且可以在多个DSPEs上执行。

    13. Neuroph通过提供支持创建、训练和保存神经网络的Java网络库和GUI工具,简化了神经网络开发。

    14. Oryx 2是一个建立在Apache Spark和Apache Kafka的Lambda架构实现,但随着实时大规模机器学习而逐渐开始专业化。这是一个用于构建应用程序的框架,但也包括打包,以及面向协同过滤、分类、回归和聚类的端到端的应用程序。

    15. Stanford Classifier是一个机器学习工具,它可以将数据项归置到一个类别。一个概率分类器,比如这个,它可以对一个数据项给出类分配的概率分布。该软件是最大熵分类器的一个Java实现。

    16. io是一个Retina API,有着快速精确的类似大脑的自然语言处理算法。

    17. JSAT是一个快速入门的机器学习库。该库是我在业余时间开发的,基于GPL3发行的。库中的一部分内容可自主学习,例如所有的代码都是独立的。JSAT没有外部依赖,而且是纯Java编写的。

    18. N-Dimensional Arrays for Java(ND4J)是一个用于JVM的科学计算库。它们是用来在生产环境中使用的,这表明例程的设计是以最小的内存需求来运行的。

    19. Java Machine Learning Library(Java机器学习库)是一系列机器学习算法的相关实现。这些算法,无论是源代码还是文档,都编写的很出色。其主要语言是Java。

    20. Java-ML是一个使用Java编写的一系列机器学习算法的Java API。它只提供了一个标准的算法接口。

    21. MLlib (Spark)是Apache Spark的可扩展机器学习库。虽然是Java,但该库与平台还支持Java,Scala和Python绑定。此库是最新的,并且算法很多。

    22. H2O是用于智能应用的机器学习API。它在大数据上对统计学、机器学习和数学进行了规模化。H2O可扩展,开发者可以在核心部分使用简单的数学知识。

    23. WalnutiQ是人脑部分面向对象模型,有着理论常用的学习算法(正在向简单强烈的情感人工智能模型方向研究)。

    24. RankLib是一个排名学习算法库。目前已经实现八种流行的算法。

    25. htm.java(基于Java的Hierarchical Temporal Memory算法实现)是一个面向智能计算的Numenta平台的Java接口。源码

    展开全文
  • 机器学习算法比较

    2016-05-31 09:42:37
    本文主要回顾下几个常用算法的适应场景及其优缺点!...机器学习算法太多了,分类、回归、聚类、推荐、图像识别领域等等,要想找到一个合适算法真的不容易,所以在实际应用中,我们一般都是采用启

    本文转载自:http://www.csuldw.com/2016/02/26/2016-02-26-choosing-a-machine-learning-classifier/

    本文主要回顾下几个常用算法的适应场景及其优缺点!(提示:部分内容摘自网络)。

    机器学习算法太多了,分类、回归、聚类、推荐、图像识别领域等等,要想找到一个合适算法真的不容易,所以在实际应用中,我们一般都是采用启发式学习方式来实验。通常最开始我们都会选择大家普遍认同的算法,诸如SVM,GBDT,Adaboost,现在深度学习很火热,神经网络也是一个不错的选择。假如你在乎精度(accuracy)的话,最好的方法就是通过交叉验证(cross-validation)对各个算法一个个地进行测试,进行比较,然后调整参数确保每个算法达到最优解,最后选择最好的一个。但是如果你只是在寻找一个“足够好”的算法来解决你的问题,或者这里有些技巧可以参考,下面来分析下各个算法的优缺点,基于算法的优缺点,更易于我们去选择它。

    偏差&方差

    在统计学中,一个模型好坏,是根据偏差和方差来衡量的,所以我们先来普及一下偏差和方差:

    • 偏差:描述的是预测值(估计值)的期望E’与真实值Y之间的差距。偏差越大,越偏离真实数据。

    • 方差:描述的是预测值P的变化范围,离散程度,是预测值的方差,也就是离其期望值E的距离。方差越大,数据的分布越分散。

    模型的真实误差是两者之和,如下图:

    如果是小训练集,高偏差/低方差的分类器(例如,朴素贝叶斯NB)要比低偏差/高方差大分类的优势大(例如,KNN),因为后者会过拟合。但是,随着你训练集的增长,模型对于原数据的预测能力就越好,偏差就会降低,此时低偏差/高方差分类器就会渐渐的表现其优势(因为它们有较低的渐近误差),此时高偏差分类器此时已经不足以提供准确的模型了。

    当然,你也可以认为这是生成模型(NB)与判别模型(KNN)的一个区别。

    为什么说朴素贝叶斯是高偏差低方差?

    以下内容引自知乎:

    首先,假设你知道训练集和测试集的关系。简单来讲是我们要在训练集上学习一个模型,然后拿到测试集去用,效果好不好要根据测试集的错误率来衡量。但很多时候,我们只能假设测试集和训练集的是符合同一个数据分布的,但却拿不到真正的测试数据。这时候怎么在只看到训练错误率的情况下,去衡量测试错误率呢?

    由于训练样本很少(至少不足够多),所以通过训练集得到的模型,总不是真正正确的。(就算在训练集上正确率100%,也不能说明它刻画了真实的数据分布,要知道刻画真实的数据分布才是我们的目的,而不是只刻画训练集的有限的数据点)。而且,实际中,训练样本往往还有一定的噪音误差,所以如果太追求在训练集上的完美而采用一个很复杂的模型,会使得模型把训练集里面的误差都当成了真实的数据分布特征,从而得到错误的数据分布估计。这样的话,到了真正的测试集上就错的一塌糊涂了(这种现象叫过拟合)。但是也不能用太简单的模型,否则在数据分布比较复杂的时候,模型就不足以刻画数据分布了(体现为连在训练集上的错误率都很高,这种现象较欠拟合)。过拟合表明采用的模型比真实的数据分布更复杂,而欠拟合表示采用的模型比真实的数据分布要简单。

    在统计学习框架下,大家刻画模型复杂度的时候,有这么个观点,认为Error = Bias + Variance。这里的Error大概可以理解为模型的预测错误率,是有两部分组成的,一部分是由于模型太简单而带来的估计不准确的部分(Bias),另一部分是由于模型太复杂而带来的更大的变化空间和不确定性(Variance)。

    所以,这样就容易分析朴素贝叶斯了。它简单的假设了各个数据之间是无关的,是一个被严重简化了的模型。所以,对于这样一个简单模型,大部分场合都会Bias部分大于Variance部分,也就是说高偏差而低方差。

    在实际中,为了让Error尽量小,我们在选择模型的时候需要平衡Bias和Variance所占的比例,也就是平衡over-fitting和under-fitting。

    偏差和方差与模型复杂度的关系使用下图更加明了:

    当模型复杂度上升的时候,偏差会逐渐变小,而方差会逐渐变大。

    常见算法优缺点

    1.朴素贝叶斯

    朴素贝叶斯属于生成式模型(关于生成模型和判别式模型,主要还是在于是否是要求联合分布),非常简单,你只是做了一堆计数。如果注有条件独立性假设(一个比较严格的条件),朴素贝叶斯分类器的收敛速度将快于判别模型,如逻辑回归,所以你只需要较少的训练数据即可。即使NB条件独立假设不成立,NB分类器在实践中仍然表现的很出色。它的主要缺点是它不能学习特征间的相互作用,用mRMR中R来讲,就是特征冗余。引用一个比较经典的例子,比如,虽然你喜欢Brad Pitt和Tom Cruise的电影,但是它不能学习出你不喜欢他们在一起演的电影。

    优点

    • 朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。
    • 对小规模的数据表现很好,能个处理多分类任务,适合增量式训练;
    • 对缺失数据不太敏感,算法也比较简单,常用于文本分类。

    缺点

    • 需要计算先验概率;
    • 分类决策存在错误率;
    • 对输入数据的表达形式很敏感。

    2.Logistic Regression(逻辑回归)

    属于判别式模型,有很多正则化模型的方法(L0, L1,L2,etc),而且你不必像在用朴素贝叶斯那样担心你的特征是否相关。与决策树与SVM机相比,你还会得到一个不错的概率解释,你甚至可以轻松地利用新数据来更新模型(使用在线梯度下降算法,online gradient descent)。如果你需要一个概率架构(比如,简单地调节分类阈值,指明不确定性,或者是要获得置信区间),或者你希望以后将更多的训练数据快速整合到模型中去,那么使用它吧。

    Sigmoid函数

    $$f(x) = \frac{1}{1+e^{-x}}$$

    优点:

    • 实现简单,广泛的应用于工业问题上;
    • 分类时计算量非常小,速度很快,存储资源低;
    • 便利的观测样本概率分数;
    • 对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题;

    缺点

    • 当特征空间很大时,逻辑回归的性能不是很好;
    • 容易欠拟合,一般准确度不太高
    • 不能很好地处理大量多类特征或变量;
    • 只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分
    • 对于非线性特征,需要进行转换;

    3.线性回归

    线性回归是用于回归的,而不像Logistic回归是用于分类,其基本思想是用梯度下降法对最小二乘法形式的误差函数进行优化,当然也可以用normal equation直接求得参数的解,结果为:

    $$ \hat{w}=(X^{T}X)^{-1}X^Ty$$

    而在LWLR(局部加权线性回归)中,参数的计算表达式为:

    $$ \hat{w}=(X^{T}WX)^{-1}X^TWy$$

    由此可见LWLR与LR不同,LWLR是一个非参数模型,因为每次进行回归计算都要遍历训练样本至少一次。

    优点: 实现简单,计算简单;
    缺点: 不能拟合非线性数据.


    4.最近领算法——KNN

    KNN即最近邻算法,其主要过程为:

    1. 计算训练样本和测试样本中每个样本点的距离(常见的距离度量有欧式距离,马氏距离等);
    2. 对上面所有的距离值进行排序;
    3. 选前k个最小距离的样本;
    4. 根据这k个样本的标签进行投票,得到最后的分类类别;
    

    如何选择一个最佳的K值,这取决于数据。一般情况下,在分类时较大的K值能够减小噪声的影响。但会使类别之间的界限变得模糊。一个较好的K值可通过各种启发式技术来获取,比如,交叉验证。另外噪声和非相关性特征向量的存在会使K近邻算法的准确性减小。

    近邻算法具有较强的一致性结果。随着数据趋于无限,算法保证错误率不会超过贝叶斯算法错误率的两倍。对于一些好的K值,K近邻保证错误率不会超过贝叶斯理论误差率。

    KNN算法的优点

    • 理论成熟,思想简单,既可以用来做分类也可以用来做回归;
    • 可用于非线性分类;
    • 训练时间复杂度为O(n);
    • 对数据没有假设,准确度高,对outlier不敏感;

    缺点

    • 计算量大;
    • 样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);
    • 需要大量的内存;

    5.决策树

    易于解释。它可以毫无压力地处理特征间的交互关系并且是非参数化的,因此你不必担心异常值或者数据是否线性可分(举个例子,决策树能轻松处理好类别A在某个特征维度x的末端,类别B在中间,然后类别A又出现在特征维度x前端的情况)。它的缺点之一就是不支持在线学习,于是在新样本到来后,决策树需要全部重建。另一个缺点就是容易出现过拟合,但这也就是诸如随机森林RF(或提升树boosted tree)之类的集成方法的切入点。另外,随机森林经常是很多分类问题的赢家(通常比支持向量机好上那么一丁点),它训练快速并且可调,同时你无须担心要像支持向量机那样调一大堆参数,所以在以前都一直很受欢迎。

    决策树中很重要的一点就是选择一个属性进行分枝,因此要注意一下信息增益的计算公式,并深入理解它。

    信息熵的计算公式如下:

    $$H=-\sum^{n}_{i=1}p(x_i)log_2p(x_i)$$

    其中的n代表有n个分类类别(比如假设是2类问题,那么n=2)。分别计算这2类样本在总样本中出现的概率p1和p2,这样就可以计算出未选中属性分枝前的信息熵。

    现在选中一个属性xixi用来进行分枝,此时分枝规则是:如果xi=vxi=v的话,将样本分到树的一个分支;如果不相等则进入另一个分支。很显然,分支中的样本很有可能包括2个类别,分别计算这2个分支的熵H1和H2,计算出分枝后的总信息熵H’ =p1 H1+p2 H2,则此时的信息增益ΔH = H - H’。以信息增益为原则,把所有的属性都测试一边,选择一个使增益最大的属性作为本次分枝属性。

    决策树自身的优点

    • 计算简单,易于理解,可解释性强;
    • 比较适合处理有缺失属性的样本;
    • 能够处理不相关的特征;
    • 在相对短的时间内能够对大型数据源做出可行且效果良好的结果。

    缺点

    • 容易发生过拟合(随机森林可以很大程度上减少过拟合);
    • 忽略了数据之间的相关性;
    • 对于那些各类别样本数量不一致的数据,在决策树当中,信息增益的结果偏向于那些具有更多数值的特征(只要是使用了信息增益,都有这个缺点,如RF)。

    5.1 Adaboosting

    Adaboost是一种加和模型,每个模型都是基于上一次模型的错误率来建立的,过分关注分错的样本,而对正确分类的样本减少关注度,逐次迭代之后,可以得到一个相对较好的模型。是一种典型的boosting算法。下面是总结下它的优缺点。

    优点

    • adaboost是一种有很高精度的分类器。
    • 可以使用各种方法构建子分类器,Adaboost算法提供的是框架。
    • 当使用简单分类器时,计算出的结果是可以理解的,并且弱分类器的构造极其简单。
    • 简单,不用做特征筛选。
    • 不容易发生overfitting。

    关于随机森林和GBDT等组合算法,参考这篇文章:机器学习-组合算法总结

    缺点:对outlier比较敏感


    6.SVM支持向量机

    高准确率,为避免过拟合提供了很好的理论保证,而且就算数据在原特征空间线性不可分,只要给个合适的核函数,它就能运行得很好。在动辄超高维的文本分类问题中特别受欢迎。可惜内存消耗大,难以解释,运行和调参也有些烦人,而随机森林却刚好避开了这些缺点,比较实用。

    优点

    • 可以解决高维问题,即大型特征空间;
    • 能够处理非线性特征的相互作用;
    • 无需依赖整个数据;
    • 可以提高泛化能力;

    缺点

    • 当观测样本很多时,效率并不是很高;
    • 对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数;
    • 对缺失数据敏感;

    对于核的选择也是有技巧的(libsvm中自带了四种核函数:线性核、多项式核、RBF以及sigmoid核):

    • 第一,如果样本数量小于特征数,那么就没必要选择非线性核,简单的使用线性核就可以了;
    • 第二,如果样本数量大于特征数目,这时可以使用非线性核,将样本映射到更高维度,一般可以得到更好的结果;
    • 第三,如果样本数目和特征数目相等,该情况可以使用非线性核,原理和第二种一样。

    对于第一种情况,也可以先对数据进行降维,然后使用非线性核,这也是一种方法。


    7. 人工神经网络的优缺点

    人工神经网络的优点:

    • 分类的准确度高;
    • 并行分布处理能力强,分布存储及学习能力强,
    • 对噪声神经有较强的鲁棒性和容错能力,能充分逼近复杂的非线性关系;
    • 具备联想记忆的功能。

    人工神经网络的缺点:

    • 神经网络需要大量的参数,如网络拓扑结构、权值和阈值的初始值;
    • 不能观察之间的学习过程,输出结果难以解释,会影响到结果的可信度和可接受程度;
    • 学习时间过长,甚至可能达不到学习的目的。

     8、K-Means聚类

    之前写过一篇关于K-Means聚类的文章,博文链接:机器学习算法-K-means聚类。关于K-Means的推导,里面有着很强大的EM思想。

    优点

    • 算法简单,容易实现 ;
    • 对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数。通常k<<n。这个算法通常局部收敛。
    • 算法尝试找出使平方误差函数值最小的k个划分。当簇是密集的、球状或团状的,且簇与簇之间区别明显时,聚类效果较好。

    缺点

    • 对数据类型要求较高,适合数值型数据;
    • 可能收敛到局部最小值,在大规模数据上收敛较慢
    • K值比较难以选取;
    • 对初值的簇心值敏感,对于不同的初始值,可能会导致不同的聚类结果;
    • 不适合于发现非凸面形状的簇,或者大小差别很大的簇。
    • 对于”噪声”和孤立点数据敏感,少量的该类数据能够对平均值产生极大影响。

    算法选择参考

    之前翻译过一些国外的文章,有一篇文章中给出了一个简单的算法选择技巧:

    1. 首当其冲应该选择的就是逻辑回归,如果它的效果不怎么样,那么可以将它的结果作为基准来参考,在基础上与其他算法进行比较;
    2. 然后试试决策树(随机森林)看看是否可以大幅度提升你的模型性能。即便最后你并没有把它当做为最终模型,你也可以使用随机森林来移除噪声变量,做特征选择;
    3. 如果特征的数量和观测样本特别多,那么当资源和时间充足时(这个前提很重要),使用SVM不失为一种选择。

    通常情况下:【GBDT>=SVM>=RF>=Adaboost>=Other…】,现在深度学习很热门,很多领域都用到,它是以神经网络为基础的,目前我自己也在学习,只是理论知识不是很厚实,理解的不够深,这里就不做介绍了。

    算法固然重要,但好的数据却要优于好的算法,设计优良特征是大有裨益的。假如你有一个超大数据集,那么无论你使用哪种算法可能对分类性能都没太大影响(此时就可以根据速度和易用性来进行抉择)。

    参考文献

    [1] https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff
    [2] http://blog.echen.me/2011/04/27/choosing-a-machine-learning-classifier/
    [3] http://www.csuldw.com/2016/02/26/2016-02-26-choosing-a-machine-learning-classifier/

    展开全文
  • ...基于Java8实现。 算法目录 常用的标准数据挖掘算法 包名 目录名 算法名 AssociationAnalysis DataMining_Apriori Apriori-关联规则挖掘算法 AssociationAnalysis Da...

    https://python.ctolib.com/article/wiki/95851

    数据挖掘十大类经典算法

    基于Java8实现。

    算法目录

    常用的标准数据挖掘算法

    包名 目录名 算法名
    AssociationAnalysis DataMining_Apriori Apriori-关联规则挖掘算法
    AssociationAnalysis DataMining_FPTree FPTree-频繁模式树算法
    BaggingAndBoosting DataMining_AdaBoost AdaBoost-装袋提升算法
    Classification DataMining_CART CART-分类回归树算法
    Classification DataMining_ID3 ID3-决策树分类算法
    Classification DataMining_KNN KNN-k最近邻算法工具类
    Classification DataMining_NaiveBayes NaiveBayes-朴素贝叶斯算法
    Clustering DataMining_BIRCH BIRCH-层次聚类算法
    Clustering DataMining_KMeans KMeans-K均值算法
    GraphMining DataMining_GSpan GSpan-频繁子图挖掘算法
    IntegratedMining DataMining_CBA CBA-基于关联规则的分类算法
    LinkMining DataMining_HITS HITS-链接分析算法
    LinkMining DataMining_PageRank PageRank-网页重要性/排名算法
    RoughSets DataMining_RoughSets RoughSets-粗糙集属性约简算法
    SequentialPatterns DataMining_GSP GSP-序列模式分析算法
    SequentialPatterns DataMining_PrefixSpan PrefixSpan-序列模式分析算法
    StatisticalLearning DataMining_EM EM-期望最大化算法
    StatisticalLearning DataMining_SVM SVM-支持向量机算法

    其他辅助的数据挖掘算法

    包名 目录名 算法名
    Others DataMining_ACO ACO-蚁群算法
    Others DataMining_BayesNetwork BayesNetwork-贝叶斯网络算法
    Others DataMining_CABDDCC CABDDCC-基于连通图的分裂聚类算法
    Others DataMining_Chameleon Chameleon-两阶段合并聚类算法
    Others DataMining_DBSCAN DBSCAN-基于密度的聚类算法
    Others DataMining_GA GA-遗传算法
    Others DataMining_GA_Maze GA_Maze-遗传算法在走迷宫游戏中的应用算法
    Others DataMining_KDTree KDTree-k维空间关键数据检索算法工具类
    Others DataMining_MSApriori MSApriori-基于多支持度的Apriori算法
    Others DataMining_RandomForest RandomForest-随机森林算法
    Others DataMining_TAN TAN-树型朴素贝叶斯算法
    Others DataMining_Viterbi Viterbi-维特比算法

    数据挖掘算法使用说明

    本项目实现的数据挖掘的经典算法以及代码,涉及到了决策分类,聚类,链接挖掘,关联挖掘,模式挖掘等等方面,后面都是相应算法的参考博文链接。 目前追加了其他的一些经典的DM算法,在others的包中涉及聚类,分类,图算法,搜索算等等,没有具体分类。

    • C4.5

    C4.5算法与ID3算法一样,都是数学分类算法,C4.5算法是ID3算法的一个改进。ID3算法采用信息增益进行决策判断,而C4.5采用的是增益率。详细介绍链接

    • CART

    CART算法的全称是分类回归树算法,他是一个二元分类,采用的是类似于熵的基尼指数作为分类决策,形成决策树后之后还要进行剪枝,我自己在实现整个算法的时候采用的是代价复杂度算法,详细介绍链接

    • KNN

    K最近邻算法。给定一些已经训练好的数据,输入一个新的测试数据点,计算包含于此测试数据点的最近的点的分类情况,哪个分类的类型占多数,则此测试点的分类与此相同,所以在这里,有的时候可以复制不同的分类点不同的权重。近的点的权重大点,远的点自然就小点。详细介绍链接

    • Naive Bayes

    朴素贝叶斯算法。朴素贝叶斯算法是贝叶斯算法里面一种比较简单的分类算法,用到了一个比较重要的贝叶斯定理,用一句简单的话概括就是条件概率的相互转换推导。详细介绍链接

    • SVM

    支持向量机算法。支持向量机算法是一种对线性和非线性数据进行分类的方法,非线性数据进行分类的时候可以通过核函数转为线性的情况再处理。其中的一个关键的步骤是搜索最大边缘超平面。详细介绍链接

    • EM

    期望最大化算法。期望最大化算法,可以拆分为2个算法,1个E-Step期望化步骤,和1个M-Step最大化步骤。他是一种算法框架,在每次计算结果之后,逼近统计模型参数的最大似然或最大后验估计。详细介绍链接

    • Apriori

    Apriori算法是关联规则挖掘算法,通过连接和剪枝运算挖掘出频繁项集,然后根据频繁项集得到关联规则,关联规则的导出需要满足最小置信度的要求。详细介绍链接

    • FP-Tree

    频繁模式树算法。这个算法也有被称为FP-growth算法,这个算法克服了Apriori算法的产生过多侯选集的缺点,通过递归的产生频度模式树,然后对树进行挖掘,后面的过程与Apriori算法一致。详细介绍链接

    • PageRank

    网页重要性/排名算法。PageRank算法最早产生于Google,核心思想是通过网页的入链数作为一个网页好快的判定标准,如果1个网页内部包含了多个指向外部的链接,则PR值将会被均分,PageRank算法也会遭到LinkSpan攻击。详细介绍链接

    • HITS

    HITS算法是另外一个链接算法,部分原理与PageRank算法是比较相似的,HITS算法引入了权威值和中心值的概念,HITS算法是受用户查询条件影响的,他一般用于小规模的数据链接分析,也更容易遭受到攻击。详细介绍链接

    • K-Means

    K-Means算法是聚类算法,k在在这里指的是分类的类型数,所以在开始设定的时候非常关键,算法的原理是首先假定k个分类点,然后根据欧式距离计算分类,然后去同分类的均值作为新的聚簇中心,循环操作直到收敛。详细介绍链接

    • BIRCH

    BIRCH算法利用构建CF聚类特征树作为算法的核心,通过树的形式,BIRCH算法扫描数据库,在内存中建立一棵初始的CF-树,可以看做数据的多层压缩。详细介绍链接

    • AdaBoost

    AdaBoost算法是一种提升算法,通过对数据的多次训练得到多个互补的分类器,然后组合多个分类器,构成一个更加准确的分类器。详细介绍链接

    • GSP

    GSP算法是序列模式挖掘算法。GSP算法也是Apriori类算法,在算法的过程中也会进行连接和剪枝操作,不过在剪枝判断的时候还加上了一些时间上的约束等条件。详细介绍链接

    • PreFixSpan

    PreFixSpan算法是另一个序列模式挖掘算法,在算法的过程中不会产生候选集,给定初始前缀模式,不断的通过后缀模式中的元素转到前缀模式中,而不断的递归挖掘下去。详细介绍链接

    • CBA

    基于关联规则分类算法。CBA算法是一种集成挖掘算法,因为他是建立在关联规则挖掘算法之上的,在已有的关联规则理论前提下,做分类判断,只是在算法的开始时对数据做处理,变成类似于事务的形式。详细介绍链接

    • RoughSets

    粗糙集算法。粗糙集理论是一个比较新颖的数据挖掘思想。这里使用的是用粗糙集进行属性约简的算法,通过上下近似集的判断删除无效的属性,进行规制的输出。详细介绍链接

    • GSpan

    gSpan算法属于图挖掘算法领域。,主要用于频繁子图的挖掘,相较于其他的图算法,子图挖掘算法是他们的一个前提或基础算法。gSpan算法用到了DFS编码,和Edge五元组,最右路径子图扩展等概念,算法比较的抽象和复杂。详细介绍链接

    ##Others目录下的算法:

    • GA

    遗传算法。遗传算法运用了生物进化理论的知识来寻找问题最优解的算法,算法的遗传进化过程分选择,交叉和变异操作,其中选择操是非常关键的步骤,把更适应的基于组遗传给下一代。详细介绍链接

    • DbScan

    基于空间密度聚类算法。dbScan作为一种特殊聚类算法,弥补了其他算法的一些不足,基于空间密,实现聚类效果,可以发现任意形状的聚簇。详细介绍链接

    • GA_Maze

    遗传算法在走迷宫游戏中的应用。将走迷宫中的搜索出口路径的问题转化为遗传算法中的问题通过构造针对此特定问题的适值函数,基因移动方向的定位,巧的进行问题的求解。详细介绍链接

    • CABDDCC

    基于连通图的分裂聚类算法。也是属于层次聚类算法主要分为2个阶段,第一阶段构造连通图。第二个阶段是分裂连通图,最终形成聚类结果。详细介绍链接

    • Chameleon

    两阶段聚类算法。与CABDDCC算法相反,最后是通过对小簇集合的合并,形成最终的结果,在第一阶段主要是通过K近邻的思想形成小规模的连通图,第二阶段通过RI(相对互连性)和RC(相对近似性)来选一个最佳的簇进行合并。详细介绍链接

    • RandomForest

    随机森林算法。算法思想是决策树+boosting.决策树采用的是CART分类回归数,通过组合各个决策树的弱分类器,构成一个最终的强分类器,在构造决策树的时候采取随机数量的样本数和随机的部分属性进行子决策树的构建,避免了过分拟合的现象发生。详细介绍链接

    • KDTree

    K-Dimension Tree。多维空间划分树,数据在多维空间进行划分与查找。主要用于关键信息的搜索,类似于在空间中的二分搜索,大大提高了搜索效率,在寻找目标元素时,使用了DFS深度优先的方式和回溯进行最近点的寻找。详细介绍链接

    • MS-Apriori

    基于多支持度的Apriori算法。是Apriori算法的升级算法,弥补了原先Apriori算法的不足,还增加了支持度差别限制以及支持度计数统计方面的优化,无须再次重新扫描整个数据集,产生关联规则的时候可以根据子集的关系避免一些置信度的计算。详细介绍链接

    • ACO

    蚁群算法。蚁群算法又称为蚂蚁算法。同GA遗传算法类似,也是运用了大自然规律的算法,用于在图中寻找最优路径的概率型算法。灵感来源于蚂蚁在寻找食物时会散播信息素的发现路径行为。详细介绍链接

    • BayesNetwork

    贝叶斯网络算法。弥补了朴素贝叶斯算法中必须要事件独立性的缺点,利用了贝叶斯网络的DAG有向无环图,允许各个事件保留一定的依赖关系,网络结构中的每个节点代表一种属性,边代表相应的条件概率值,通过计算从而能得到精准的分类效果。详细介绍链接

    • TAN

    树型朴素贝叶斯算法。此算法又被称为加强版朴素贝叶斯算法。在满足原有朴素贝叶斯条件的基础上,他允许部条件属性直接的关联性。形成树型的结构。详细介绍链接

    • Viterbi

    维特比算法。给定一个隐马尔科夫模型以及一个观察序列,求出潜在的状态序列信息,每个潜在状态信息又会受到前一个状态信息的影响。

    算法使用方法

    在每个算法中给出了3大类型,主算法程序,调用程序,输入数据,调用方法如下:

    • 将需要数据的测试数据转化成与给定的输入格式相同
    • 然后以Client类的测试程序调用方式进行使用。
    • 也可以自行修改算法程序,来适用于自己的使用场景

     

    展开全文
  • IT派 - {技术青年圈}持续关注互联网、区块链、人工智能领域摘要: 本文将介绍一些目前流行的、强大的基于Java机器学习库。图片来源: Mindfire Soluti...
  • Kaggle阿里巴巴天池大数据比赛DataCastleCCF大数据与计算智能大赛Di-Tech算法大赛KDD-CupKDnuggets Competition全国高校云计算应用创新大赛Byte Cup国际机器学习竞赛WID数据竞赛数据火车竞赛网站DrivenData ...
  • 1、Weka集成了数据挖掘工作的机器学习算法。这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用。Weka包括一系列的工具,如数据预处理、分类、回归、聚类、关联规则以及可视化。 2.Massive Online ...
  • https://blog.csdn.net/walteryonng20xx/article/details/85059360
  • 而要成为一名合格的机器学习算法工程师(以下简称算法工程师)更是难上加难,因为在掌握工程师的通用技能以外,还需要掌握一张不算小的机器学习算法知识网络。下面我们就将成为一名合格的算法工程师所需的技能进行...
  • 人工智能机器学习Java也可以 用于Java的5大机器学习库盘点 机器学习是目前最热门的技能之一...Weka 3是一个完全基于Java开发,最适合用于机器学习算法。Weka主要用于数据挖掘,数据分析和预测建模。它完全免费,...
  • opencv提供了非常多的机器学习算法用于研究。这里对这些算法进行分类学习和研究,以抛砖引玉。这里使用的机器学习算法包括:人工神经网络,boost,决策树,最近邻,逻辑回归,贝叶斯,随机森林,SVM等算法等。机器...
  • ML/DL之预测分析类:利用机器学习算法进行预测分析的简介、分析、代码实现之详细攻略 目录 机器学习算法进行预测的简介 机器学习算法进行预测的分析 机器学习算法进行预测的代码实现 机器学习算法...
  • 2018年机器学习算法工程师——秋招自我总结 (2018.3.12 ~ 2018.10.14) (1)简历 - 笔试 - 面试(一面,二面,……,HR面,加面) - offer ...
  • (本文数据为实验用例)一、背景母亲是老师反而会对孩子的学习成绩造成不利影响?能上网的家庭,孩子通常能取得较好的成绩?影响孩子成绩的最大因素居然是母亲的学历?本文通过机器挖掘算法和中学真实的学生数据为您...
  • 本来这篇标题我想的是算法工程师的技能,但是我觉得要是加上机器学习在标题上,估计点的人会多一点,所以标题成这样了,呵呵,而且被搜索引擎收录的时候多了一个时下的热门词,估计曝光也会更多点。不过放心,文章...
  • 机器学习算法根据训练数据(training data)使得表示算法行为的数学目标最大化,并以此来进行预测或者做出决定。机器学习分为分类、回归、聚类等,每种都有不一样的目标。 应用场景和处理流程 所有的算法都需要定义...
  • 大家都知道,机器学习算法用python的契合度是最高的,但很多公司的在售产品是用java写,想集成机器学习算法,又不能把前面的东西都推到重写,所以在java中调python方法迫在眉睫,所以本方案就是通过java调python程序...
  • 1. Weka集成了数据挖掘工作的机器学习算法。这些算法可以直接应用于一个数据集上或者你可以自己编写代码来调用。Weka包括一系列的工具,如数据预处理、分类、回归、聚类、关联规则以及可视化。 2.Massive On...
  • 摘要: 你是一名希望开始或者正在学习机器学习Java程序员吗? 利用机器学习编写程序是最佳的学习方式。你可以从头开始编写算法,但是利用现有的开源库,你可以取得更大的进步。 本文介绍了主要的平台和开放源码的...
  • Java 自然语言处理 CoreNLP—斯坦福大学的CoreNLP提供一系列的自然语言处理工具,输入原始英语文本,可以给出单词的基本形式(下面Stanford开头的几个工具都包含其中)。Stanford Parser—一个自然语言解析器...
1 2 3 4 5 ... 20
收藏数 84,357
精华内容 33,742
关键字:

java机器学习算法