原创
机器学习入门
温馨提示:
本文最后更新于 2018年03月09日,已超过 2,450 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
什么 是机器学习?
机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。
什么是SparkMLlib?
MLlib是Spark的机器学习(ML)库。其目标是使实用的机器学习可扩展且简单。从较高的层面来说,它提供了以下工具:
- ML算法:常见的学习算法,如分类,回归,聚类和协同过滤
- 特征化:特征提取,转换,降维和选择
- 管道:用于构建,评估和调整ML管道的工具
- 持久性:保存和加载算法,模型和管道
- 实用程序:线性代数,统计,数据处理等。
简单示例
1.计算两个数之间的相关性
package com.lzhpo.spark.com.lzhpo.spark.basic;
import org.apache.spark.ml.linalg.VectorUDT;
import org.apache.spark.ml.linalg.Vectors;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.types.Metadata;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;
import java.util.Arrays;
import java.util.List;
/**
* <p>Create By IntelliJ IDEA</p>
* <p>Author:lzhpo</p>
* 《机器学习》---基本统计
*
* ---《相关性》
* 计算两个数据系列之间的相关性是统计学中的常见操作。
* 在spark.ml提供的灵活性来计算多个系列两两之间的相关性。
* 支持的相关方法目前是Pearson和Spearman的相关性。
*
* Correlation 使用指定的方法计算输入数据集的相关矩阵。输出将是一个DataFrame,它包含向量列的相关矩阵。
*
*/
public class CorrelationDemo {
public static void main(String[] args) {
SparkSession spark = SparkSession
.builder()
.appName("CorrelationDemo")
.master("local")
.getOrCreate();
List<Row> data = Arrays.asList(
RowFactory.create(Vectors.sparse(4, new int[]{0, 3}, new double[]{1.0, -2.0})),
RowFactory.create(Vectors.dense(4.0, 5.0, 0.0, 3.0)),
RowFactory.create(Vectors.dense(6.0, 7.0, 0.0, 8.0)),
RowFactory.create(Vectors.sparse(4, new int[]{0, 3}, new double[]{9.0, 1.0}))
);
StructType schema = new StructType(new StructField[]{
new StructField("features", new VectorUDT(), false, Metadata.empty()),
});
Dataset<Row> df = spark.createDataFrame(data, schema);
Row r1 = org.apache.spark.ml.stat.Correlation.corr(df, "features").head();
System.out.println("Pearson correlation matrix:\n" + r1.get(0).toString());
//结果:
/*
Pearson correlation matrix:
1.0 0.055641488407465814 NaN 0.4004714203168137
0.055641488407465814 1.0 NaN 0.9135958615342522
NaN NaN 1.0 NaN
0.4004714203168137 0.9135958615342522 NaN 1.0
*/
Row r2 = org.apache.spark.ml.stat.Correlation.corr(df, "features", "spearman").head();
System.out.println("Spearman correlation matrix:\n" + r2.get(0).toString());
//结果:
/*
Spearman correlation matrix:
1.0 0.10540925533894532 NaN 0.40000000000000174
0.10540925533894532 1.0 NaN 0.9486832980505141
NaN NaN 1.0 NaN
0.40000000000000174 0.9486832980505141 NaN 1.0
*/
spark.stop();
}
}
2.预测
package com.lzhpo.spark.com.lzhpo.spark.basic;
import org.apache.spark.ml.linalg.VectorUDT;
import org.apache.spark.ml.linalg.Vectors;
import org.apache.spark.ml.stat.ChiSquareTest;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.Metadata;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;
import java.util.Arrays;
import java.util.List;
/**
* <p>Create By IntelliJ IDEA</p>
* <p>Author:lzhpo</p>
* 《机器学习》---基本统计
*
假设检验是统计学中一种强有力的工具,用于确定结果是否具有统计显着性,无论该结果是否偶然发生。
spark.ml目前支持Pearson的卡方(χ2
ChiSquareTest对标签的每个功能进行Pearson独立测试。
对于每个特征,(特征,标签)对被转换为应急矩阵,对其计算卡方统计量。所有标签和特征值必须是分类的。
*
*/
public class ChiSquare {
public static void main(String[] args) {
SparkSession spark = SparkSession
.builder()
.appName("ChiSquare")
.master("local")
.getOrCreate();
List<Row> data = Arrays.asList(
RowFactory.create(0.0, Vectors.dense(0.5, 10.0)),
RowFactory.create(0.0, Vectors.dense(1.5, 20.0)),
RowFactory.create(1.0, Vectors.dense(1.5, 30.0)),
RowFactory.create(0.0, Vectors.dense(3.5, 30.0)),
RowFactory.create(0.0, Vectors.dense(3.5, 40.0)),
RowFactory.create(1.0, Vectors.dense(3.5, 40.0))
);
StructType schema = new StructType(new StructField[]{
new StructField("label", DataTypes.DoubleType, false, Metadata.empty()),
new StructField("features", new VectorUDT(), false, Metadata.empty()),
});
Dataset<Row> df = spark.createDataFrame(data, schema);
Row r = ChiSquareTest.test(df, "features", "label").head();
System.out.println("pValues: " + r.get(0).toString());
System.out.println("degreesOfFreedom: " + r.getList(1).toString());
System.out.println("statistics: " + r.get(2).toString());
//结果
/*
pValues: [0.6872892787909721,0.6822703303362126]
degreesOfFreedom: [2, 3]
statistics: [0.75,1.5]
*/
spark.stop();
}
}
- 本文标签: 机器学习
- 本文链接: http://www.lzhpo.com/article/57
- 版权声明: 本文由lzhpo原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权