(一)机器学习分类描述:
监督式学习:
*
* 在监督式学习下,输入数据被称为“训练数据”,每组训练数据有一个明确的标识或结果,
* 如对防垃圾邮件系统中“垃圾邮件”“非垃圾邮件”,对手写数字识别中的“1“,”2“,”3“,”4“等。在建立预测模型的时候,
* 监督式学习建立一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不断的调整预测模型,
* 直到模型的预测结果达到一个预期的准确率。监督式学习的常见应用场景如分类问题和回归问题。
* 常见算法有逻辑回归(Logistic Regression)和反向传递神经网络(Back Propagation Neural Network)
*
* 非监督式学习:
*
* 在非监督式学习中,数据并不被特别标识,学习模型是为了推断出数据的一些内在结构。
* 常见的应用场景包括关联规则的学习以及聚类等。常见算法包括Apriori算法以及k-Means算法。
*
* 半监督式学习:
*
* 在此学习方式下,输入数据部分被标识,部分没有被标识,这种学习模型可以用来进行预测,
* 但是模型首先需要学习数据的内在结构以便合理的组织数据来进行预测。应用场景包括分类和回归,
* 算法包括一些对常用监督式学习算法的延伸,这些算法首先试图对未标识数据进行建模,在此基础上再对标识的数据进行预测。
* 如图论推理算法(Graph Inference)或者拉普拉斯支持向量机(Laplacian SVM.)等。
*
*
*
* 强化学习:
* 在这种学习模式下,输入数据作为对模型的反馈,不像监督模型那样,输入数据仅仅是作为一个检查模型对错的方式,
* 在强化学习下,输入数据直接反馈到模型,模型必须对此立刻作出调整。常见的应用场景包括动态系统以及机器人控制等。
* 常见算法包括Q-Learning以及时间差学习(Temporal difference learning)
* 在企业数据应用的场景下, 人们最常用的可能就是监督式学习和非监督式学习的模型。
* 在图像识别等领域,由于存在大量的非标识的数据和少量的可标识数据, 目前半监督式学习是一个很热的话题。
* 而强化学习更多的应用在机器人控制及其他需要进行系统控制的领域。
(二)Breeze简单练习
package com.dtdream.emr.spark.mllib
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.stat.Statistics
import org.apache.spark.mllib.util.{KMeansDataGenerator, LinearDataGenerator, LogisticRegressionDataGenerator, MLUtils}
import org.apache.spark.sql.SparkSession
import breeze.linalg._
object spark_mllib_1 extends App{
val spark = SparkSession
.builder()
.appName("spark-mllib")
.master("local[*]")
.enableHiveSupport()
.getOrCreate()
val sc = spark.sparkContext
val datalines = sc.textFile("etc\\sample_stat.txt",2)
.map(x=>x.split("\t"))
.map(f=>f.map(f=>f.toDouble))
val data = datalines.map(x=>Vectors.dense(x))
val data1 = Statistics.colStats(data)
println("数据最大值:"
+data1.max+"数据最小值:"
+data1.min+"平均值:"
+data1.mean+"方差值:"
+data1.variance+"L1范式:"
+data1.normL1+"L2范式:"
+data1.normL2)
//计算相关系数
val corr1 = Statistics.corr(data,"pearson")
val corr2 = Statistics.corr(data,"spearman")
val x1 = sc.parallelize(Array(1.0,2.0,3.0,4.0))
val y1 = sc.parallelize(Array(5.0,6.0,6.0,6.0))
val corr3 = Statistics.corr(x1,y1,"pearson")
println("pearson相关系数为:"+corr1)
println("spearman相关系数为:"+corr2)
println("pearson相关系数为:"+corr3)
//卡方检验
val v1 = Vectors.dense(43.0,9.0)
val v2 = Vectors.dense(44.0,4.0)
val c1 = Statistics.chiSqTest(v1,v2)
println(c1)
val dataLVSM = MLUtils.loadLibSVMFile(sc,"etc\\sample_libsvm_data.txt",0,2)
dataLVSM.take(1).foreach(println)
//生成KMeans的训练样本数据
val KemansRDD = KMeansDataGenerator.generateKMeansRDD(sc,40,5,3,1.0,2)
KemansRDD.take(10).foreach(println)
//生成线性回归训练样本数据
val LinearRDD = LinearDataGenerator.generateLinearRDD(sc,40,3,1.0,2,0)
LinearRDD.take(10).foreach(println)
//生成逻辑回归训练样本数据
val LogisticRDD = LogisticRegressionDataGenerator.generateLogisticRDD(sc,40,3,1.0,2,0.5)
LogisticRDD.take(10).foreach(println)
//测试Breeze库方法及使用
//生成两行三列全0矩阵
println(DenseMatrix.zeros[Double](2,3))
//生成全量0向量
println(DenseVector.zeros[Double](2))
//生成全1向量
println(DenseVector.ones[Double](2))
//按数值填充向量
println(DenseVector.fill[Double](5){3.0})
//生成随机向量
println(DenseVector.range(3,9,2))
println(DenseVector.rangeD(3.0,9.0,2.0))
//单位矩阵
println(DenseMatrix.eye[Double](5))
//对角矩阵
println(diag(DenseVector(1.0,2.0,3.0)))
//按照行建矩阵
println(DenseMatrix((1.0,2.0),(3.0,4.0)))
//按照行创建向量
println(DenseVector(1.0,2.0,3.0,4.0))
//向量转置
println(DenseVector(1.0,2.0,3.0,4.0).t)
//从函数创建向量
println(DenseVector.tabulate(3){i=>2*i})
//从函数创建矩阵
println(DenseMatrix.tabulate(2,3){case(x,y)=>x+y})
//从数组创建矩阵
println(new DenseVector[Double](Array(1.0,2.0,3.0)))
//从数组创建矩阵
println(new DenseMatrix[Double](2,3,Array(1.0,2.0,3.0,4.0,5.0,6.0)))
//0到1随机向量
println(DenseVector.rand(4))
//0到1随机矩阵
println(DenseMatrix.rand(2,3))
val m = DenseMatrix((1.0,2.0,3.0),(3.0,4.0,5.0))
//调整矩阵形状
println(m.reshape(3,2))
//矩阵转成向量
println(m.toDenseVector)
val m1 = DenseMatrix((1.0,2.0,3.0),(3.0,4.0,5.0),(6.0,7.0,8.0))
//复制上三角
println(upperTriangular(m1))
//复制下三角
println(lowerTriangular(m1))
sc.stop()
}