(原文地址:
http://blog.csdn.net/codemosi/article/category/2777045,转载麻烦带上原文地址。hadoop hive hbase mahout storm spark kafka flume,等连载中,做个爱分享的人
)
商业理解 - 数据理解 - 数据准备 - 建立模型 - 模型评估 - 模型发布
数据挖掘是从海量数据中挖掘出有用的商业价值,如客户分类,新闻分类等。挖掘类型分为,聚类,分类,预测,关联。4种类型的挖掘任务。数据挖掘的过程 原始数据 --》 抽取特征向量 --》 训练模型 -》评估模型 -》 最终模型。
mllib是spark提供的用于数据挖掘的
机器学习的
算法库。mllib在数据挖掘中,充当 训练模型 -》评估模型 -》 最终模型。后3个过程的角色。
mllib 1.1包含了以下算法:
分类算法 (数据挖掘主要的分类算法有:1.逻辑回归,2.支持向量机,3.决策树,4.朴素贝叶斯,5.神经网络,6.K近邻),spark的mllib基本都实现了
SVMs 3
支持向量机
logistic regression
逻辑回归
decision trees
决策树 1
naive Bayes
朴素贝叶斯 9
预测算法
linear regression
线性回归
协同过滤算法(只实现了一个ALS)
alternating least squares (ALS)
交替最小二乘(ALS)
聚类算法(只实现了一个kmeas算法)
k-means 2
Dimensionality reduction (没听过,不知道干啥的)
降维
singular value decomposition (SVD)
奇异值分解(SVD)
principal component analysis (PCA)
主成分分析(PCA)
mllib的KMeans算法API说明
聚类算法从使用上分三步,1:训练模型,2:检验模型,3:使用模型。
1 模型训练接口
/**
* Trains a k-means model using the given set of parameters.
*
* @param data training points stored as `RDD[Array[Double]]`
* @param k number of clusters
* @param maxIterations max number of iterations
* @param runs number of parallel runs, defaults to 1. The best model is returned.
* @param initializationMode initialization model, either "random" or "k-means||" (default).
*/
def train( data: RDD[Vector],//数据集
k: Int,//聚类的数量
maxIterations: Int,//最大迭代次数
runs: Int,//
initializationMode: String): KMeansModel = {
new KMeans().setK(k)
.setMaxIterations(maxIterations)
.setRuns(runs)
.setInitializationMode(initializationMode)
.run(data)
}
2 模型评估接口(距离平方和) /**
* Return the K-means cost (sum of squared distances of points to their nearest center) for this
* model on the given data.
*/
def computeCost(data: RDD[Vector]): Double = {
val centersWithNorm = clusterCentersWithNorm
val bcCentersWithNorm = data.context.broadcast(centersWithNorm)
data.map(p => KMeans.pointCost(bcCentersWithNorm.value, new BreezeVectorWithNorm(p))).sum()
}
3 预测接口
/** Returns the cluster index that a given point belongs to. */
def predict(point: Vector): Int = {
KMeans.findClosest(clusterCentersWithNorm, new BreezeVectorWithNorm(point))._1
}
mllib的kmeans算法,做聚类应用
假设有文本数据kmeans.txt,记录的是用户的信息,每行代表一个用户的用户数据的特征向量,各个数据以tab符隔开,文本的内容如下
2 3 4 5 6
5 1 6 7 3
4 6 1 3 6
3 5 7 1 6
5 1 6 3 3
2 3 6 2 6
//0 准备spark上下文环境
val conf = new SparkConf().setAppName(s"RDC KMeans")
val sc = new SparkContext(conf)
//1 准备数据,一共有6个数据
val examples = sc.textFile("/usr/rdc/kmeans.txt").map { line => Vectors.dense(line.split(' ').map(_.toDouble))}.cache()
//2 模型训练,将6个数据分为 3 聚类
val model = KMeans. train(examples , 3, 20)
//3 评估模型,计算距离平方和,这个cost越小,则聚类的结果越准确。
val cost = model. computeCost(examples)
//3 预测,假设此时来了一个新的用户数据的特征向量(4 4 4 4 4),根据训练好的3个聚类的模型做预测,返回值代表所属的类型,
val type = model. predict(Vectors.dense("4 4 4 4 4".split(' ').map(_.toDouble)))//如返回值type 为1,说明(4 4 4 4 4)属于第二类。3个聚类 (0,1,2),从0开始算。