我为受到https://databricks-training.s3.amazonaws.com/movie-recommendation-with-mllib.html启发的MovieLens数据库构建了一个简单的推荐系统.
我也有像这里的显式培训的问题:Apache Spark ALS协同过滤结果.它们没有意义 使用隐式训练(在显式和隐式数据上)给出了合理的结果,但是显式训练没有.
虽然现在这对我来说还不错,但我很好奇如何更新模型.虽然我目前的解决方案就像
我希望有这样的流程:
因此,我必须更新我的模型,而不必完全重新计算它.有没有机会这样做?
虽然第一种方法适用于批处理(如在夜间批次中生成建议),但第二种方式对于几乎实时生成建议是有益的.
machine-learning collaborative-filtering apache-spark apache-spark-mllib
我正在尝试使用Apache Spark MLlib实现文档分类器,并且我在表示数据时遇到了一些问题.我的代码如下:
import org.apache.spark.sql.{Row, SQLContext}
import org.apache.spark.sql.types.{StringType, StructField, StructType}
import org.apache.spark.ml.feature.Tokenizer
import org.apache.spark.ml.feature.HashingTF
import org.apache.spark.ml.feature.IDF
val sql = new SQLContext(sc)
// Load raw data from a TSV file
val raw = sc.textFile("data.tsv").map(_.split("\t").toSeq)
// Convert the RDD to a dataframe
val schema = StructType(List(StructField("class", StringType), StructField("content", StringType)))
val dataframe = sql.createDataFrame(raw.map(row => Row(row(0), row(1))), schema)
// Tokenize
val tokenizer = new Tokenizer().setInputCol("content").setOutputCol("tokens")
val tokenized = tokenizer.transform(dataframe)
// TF-IDF
val htf = new HashingTF().setInputCol("tokens").setOutputCol("rawFeatures").setNumFeatures(500)
val tf = htf.transform(tokenized)
tf.cache
val idf …Run Code Online (Sandbox Code Playgroud) 我正在努力保存ML Pipeline生产的数千种型号.正如在答复中指出这里,该机型可以保存如下:
import java.io._
def saveModel(name: String, model: PipelineModel) = {
val oos = new ObjectOutputStream(new FileOutputStream(s"/some/path/$name"))
oos.writeObject(model)
oos.close
}
schools.zip(bySchoolArrayModels).foreach{
case (name, model) => saveModel(name, Model)
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试使用s3://some/path/$name,/user/hadoop/some/path/$name因为我希望模型最终保存到亚马逊s3,但它们都失败,并显示无法找到路径的消息.
如何将模型保存到Amazon S3?
我想制作libsvm格式,所以我将数据帧设置为所需的格式,但我不知道如何转换为libsvm格式.格式如图所示.我希望所需的libsvm类型是用户项:rating.如果您知道在当前情况下该怎么做:
val ratings = sc.textFile(new File("/user/ubuntu/kang/0829/rawRatings.csv").toString).map { line =>
val fields = line.split(",")
(fields(0).toInt,fields(1).toInt,fields(2).toDouble)
}
val user = ratings.map{ case (user,product,rate) => (user,(product.toInt,rate.toDouble))}
val usergroup = user.groupByKey
val data =usergroup.map{ case(x,iter) => (x,iter.map(_._1).toArray,iter.map(_._2).toArray)}
val data_DF = data.toDF("user","item","rating")
Run Code Online (Sandbox Code Playgroud)

我正在使用Spark 2.0.
libsvm apache-spark apache-spark-sql apache-spark-ml apache-spark-mllib
我正在尝试提取我使用PySpark训练的随机森林对象的要素重要性.但是,我没有看到在文档中的任何地方执行此操作的示例,也不是RandomForestModel的方法.
如何从RandomForestModelPySpark中的回归器或分类器中提取要素重要性?
以下是文档中提供的示例代码,以帮助我们开始; 但是,没有提到其中的特征重要性.
from pyspark.mllib.tree import RandomForest
from pyspark.mllib.util import MLUtils
# Load and parse the data file into an RDD of LabeledPoint.
data = MLUtils.loadLibSVMFile(sc, 'data/mllib/sample_libsvm_data.txt')
# Split the data into training and test sets (30% held out for testing)
(trainingData, testData) = data.randomSplit([0.7, 0.3])
# Train a RandomForest model.
# Empty categoricalFeaturesInfo indicates all features are continuous.
# Note: Use larger numTrees in practice.
# Setting featureSubsetStrategy="auto" lets the algorithm choose.
model = RandomForest.trainClassifier(trainingData, numClasses=2, …Run Code Online (Sandbox Code Playgroud) 我想尝试一下ALS机器学习算法的例子.我的代码工作正常,但我不理解rank算法中使用的参数.
我在java中有以下代码
// Build the recommendation model using ALS
int rank = 10;
int numIterations = 10;
MatrixFactorizationModel model = ALS.train(JavaRDD.toRDD(ratings),
rank, numIterations, 0.01);
Run Code Online (Sandbox Code Playgroud)
我已经阅读了一些内容,它是模型中潜在因素的数量.
假设我有一个包含100行的(用户,产品,评级)数据集.应该是什么值rank(潜在因素).
如何创建SparseVector和密集的矢量表示
如果DenseVector是:
denseV = np.array([0., 3., 0., 4.])
Run Code Online (Sandbox Code Playgroud)
什么是稀疏矢量表示?
我有兴趣使用Spark MLlib应用LDA主题建模.我已经检查了这里的代码和解释,但我找不到如何使用模型然后在一个新的看不见的文档中找到主题分布.
遵循Spark MLlib指南, 我们可以读到Spark有两个机器学习库:
spark.mllib,建立在RDD之上.spark.ml,建立在Dataframes之上.根据 StackOverflow上的这个和这个问题,Dataframes比RDD更好(和更新),应尽可能使用.
问题是我想使用常见的机器学习算法(例如:Frequent Pattern Mining,Naive Bayes等)和spark.ml(对于数据帧)不提供此类方法,仅spark.mllib(对于RDD)提供此算法.
如果Dataframes比RDD更好并且推荐指南推荐使用spark.ml,为什么不能在该lib中实现常见的机器学习方法?
machine-learning apache-spark pyspark apache-spark-ml apache-spark-mllib
根据mllib.feature.Word2Vec - spark 1.3.1文档[1]:
def setNumIterations(numIterations: Int): Word2Vec.this.type
Run Code Online (Sandbox Code Playgroud)
设置迭代次数(默认值:1),该值应小于或等于分区数.
def setNumPartitions(numPartitions: Int): Word2Vec.this.type
Run Code Online (Sandbox Code Playgroud)
设置分区数(默认值:1).使用较小的数字来提高准确性.
但是在这个Pull Request [2]中:
为了使我们的实现更具可伸缩性,我们分别训练每个分区,并在每次迭代后合并每个分区的模型.为了使模型更准确,可能需要多次迭代.
问题:
参数numIterations和numPartitions如何影响算法的内部工作?
考虑到以下规则,在设置分区数和迭代次数之间是否需要权衡?
更准确 - >更多迭代a/c到[2]
更多迭代 - >更多分区a/c到[1]
更多分区 - >精度更低