p2p网站开发思路方案,网站优化如何做,自己怎么建个网站赚钱,系统开发是系统建设中工作任务最为繁重的阶段基于最新2.2.0版本翻译本节介绍和特征一起工作的算法#xff0c;大致分为以下几类#xff1a;提取#xff1a;从原始数据提取特征转换#xff1a;缩放#xff0c;转换#xff0c;或者修改特征选择#xff1a;从一个大的特征集合里面选择一个子集局部敏感哈希(LSH)#…基于最新2.2.0版本翻译本节介绍和特征一起工作的算法大致分为以下几类提取从原始数据提取特征转换缩放转换或者修改特征选择从一个大的特征集合里面选择一个子集局部敏感哈希(LSH)这类算法能将特征变换与其他算法相结合目录特征提取TF-IDFWord2VecCountVectorizer特征转换标记生成器(Tokenizer)停用词移除器(StopWordsRemover)n-gram二值化PCA多项式展开(PolynomialExpansion)离散余弦变换(Discrete Cosine Transform DCT)StringIndexerIndexToStringOneHotEncoderVectorIndexerInteractionNormalizerStandardScalerMinMaxScalerMaxAbsScalerBucketizerElementwiseProductSQLTransformerVectorAssemblerQuantileDiscretizerImputer特征选择VectorSlicerRFormulaChiSqSelector局部敏感哈希欧几里德距离的随机投影Jaccard距离最小hash特征转换近似相似性join近似最近邻搜索LSH操作LSH算法特征提取TF-IDFTF-IDF是在文本挖掘中广泛使用的特征向量化方法以反映语料库中文档的词语的重要性。用t表示一个词d表示一篇文档D表示文档集 词频TF(t, d)表示表示文档d中词t的个数文档频率DF(t,D)表示在文档集D中词t出现的个数。如果我们仅仅用词频衡量重要性非常容易出现那些 频频繁出现的词如the,of但表示出很少和文档有关的信息。如果一个词语在语料库中经常出现这意味着它不携带关于特定文档的特殊信息。逆文档频率IDF是一个词语能提供多少信息的数值化表示。IDF(t,D)log((|D|1)/(DF(t, D) 1))在这里|D|是语料的总文档数由于使用对数如果一个词出现在所有文档中则IDF值 为0应用平滑项以避免分母为0。TF-IDF是度量TF和IDF的产物TF-IDF(t,d,D)TF(t,d)*IDF(t,D)词频和文档频率有很多定义的方法。在MLlib我们分离TF和IDF使其灵活。TFHashingTF和CountVectorizer都可以用来生成词频向量。HashingTF是一个转换器它接受词集合输入并将这些集合转换为固定长度的特征向量。在文本处理中一个词语集合也许是一个词袋。HashingTF利用哈希技巧。原始特征被映射到索引通过使用Hash函数。Hash函数使用MurmurHash 3,然后根据映射的索引计算词频。这个方法避免了在大语料上成本昂贵的全局词索引map的计算方式但是会存在潜在的hash冲突也就是不同的词特征在hash后被映射成相同的词。为了减少冲突的机会我们可以增加目标特征维度即散列表的桶数。由于使用简单的模数将散列函数转换为列索引建议使用两个幂作为特征维否则不会将特征均匀地映射到列。默认的特征维度为2^18262,144.可选的二进制切换参数控制词频计数。当设置为true时所有非零频率计数设置为1.对于模拟二进制而不是整数计数的离散概率模型特别有用。CountVectorizer 将一个文本文档转成词数向量具体参考CountVectorizerIDF:IDF是一个估计器通过拟合数据集产生一个IDFModel。IDFModel输入特征向量(通过由HashingTF 或者 CountVectorizer创建)并且缩放每列。直观地说它减少了在语料库中频繁出现的列。注意spark.ml 不提供文本分词我们参照Stanford NLP Group和scalanlp/chalk.示例在下面的代码段中我们从一组句子开始。我们用Tokenizer将每个句子分成单词。对于每个句子(包的单词)我们使用HashingTF将该句子哈希成特征向量。我们使用IDF来重新缩放特征向量;这通常在使用文本作为功能时提高性能。然后我们的特征向量可以被传递给学习算法。参考HashingTF Scala docs和IDF Scala docs获得更详细的APIimport org.apache.spark.ml.feature.{HashingTF, IDF, Tokenizer}val sentenceData spark.createDataFrame(Seq((0.0, Hi I heard about Spark),(0.0, I wish Java could use case classes),(1.0, Logistic regression models are neat))).toDF(label, sentence)val tokenizer new Tokenizer().setInputCol(sentence).setOutputCol(words)val wordsData tokenizer.transform(sentenceData)val hashingTF new HashingTF().setInputCol(words).setOutputCol(rawFeatures).setNumFeatures(20)val featurizedData hashingTF.transform(wordsData)// alternatively, CountVectorizer can also be used to get term frequency vectorsval idf new IDF().setInputCol(rawFeatures).setOutputCol(features)val idfModel idf.fit(featurizedData)val rescaledData idfModel.transform(featurizedData)rescaledData.select(label, features).show()完整示例请参考spark仓库examples/src/main/scala/org/apache/spark/examples/ml/TfIdfExample.scala作者xcrossed链接https://www.jianshu.com/p/91a3920932c0