VectorIndexer把数据集中的类型特征索引为向量。它不仅可以自动的判断哪些特征是可以类别化,也能将原有的值转换为类别索引。 通常情况下,它的过程如下: 1 拿到类型为vector的输入列和参数maxCategories 2 根据有区别的值的数量,判断哪些特征可以类别化。拥有的不同值的数量至少要为maxCategories的特征才能判断可以类别化。 3 对每一个可以类别化的特征计算基于0
One-hot encoding将标签索引列映射为二值向量,这个向量至多有一个1值。 这个编码允许要求连续特征的算法(如逻辑回归)使用类别特征。下面是程序调用的例子。 import org.apache.spark.ml.feature.{OneHotEncoder, StringIndexer} val df = spark.createDataFrame(Seq( (0, "a"),
与StringIndexer相对的是,IndexToString将标签索引列映射回原来的字符串标签。一个通用的使用案例是使用 StringIndexer将标签转换为索引,然后通过索引训练模型,最后通过IndexToString将预测的标签索引恢复成字符串标签。 例子 假设我们有下面的DataFrame,它的列名为id和categoryIndex。 id | categoryIndex -
StringIndexer将标签列的字符串编码为标签索引。这些索引是[0,numLabels),通过标签频率排序,所以频率最高的标签的索引为0。 如果输入列是数字,我们把它强转为字符串然后在编码。 例子 假设我们有下面的DataFrame,它的列名是id和category。 id | category ----|---------- 0 | a 1 | b 2 | c 3
Polynomial expansion是一个将特征展开到多元空间的处理过程。 它通过n-degree结合原始的维度来定义。比如设置degree为2就可以将(x, y)转化为(x, x x, y, x y, y y)。PolynomialExpansion提供了这个功能。 下面的例子展示了如何将特征展开为一个3-degree多项式空间。 import org.apache.spark.ml.f
Binarization是一个将数值特征转换为二值特征的处理过程。threshold参数表示决定二值化的阈值。 值大于阈值的特征二值化为1,否则二值化为0。下面是代码调用的例子。 import org.apache.spark.ml.feature.Binarizer val data = Array((0, 0.1), (1, 0.8), (2, 0.2)) val dataFrame =
Stop words是那些需要从输入数据中排除掉的词。删除这些词的原因是, 这些词出现频繁,并没有携带太多有意义的信息。 StopWordsRemover输入一串句子,将这些输入句子中的停用词全部删掉。停用词列表是通过stopWords参数来指定的。 一些语言的默认停用词可以通过调用StopWordsRemover.loadDefaultStopWords(language)来获得。可以用
Tokenization是一个将文本(如一个句子)转换为个体单元(如词)的处理过程。 一个简单的Tokenizer类就提供了这个功能。下面的例子展示了如何将句子转换为此序列。 RegexTokenizer基于正则表达式匹配提供了更高级的断词(tokenization)。默认情况下,参数pattern(默认是\s+)作为分隔符, 用来切分输入文本。用户可以设置gaps参数为false用来表明
CountVectorizer和CountVectorizerModel的目的是帮助我们将文本文档集转换为词频(token counts)向量。 当事先没有可用的词典时,CountVectorizer可以被当做一个Estimator去抽取词汇,并且生成CountVectorizerModel。 这个模型通过词汇集为文档生成一个稀疏的表示,这个表示可以作为其它算法的输入,比如LDA。 在训练
Word2Vector将词转换成分布式向量。分布式表示的主要优势是相似的词在向量空间距离较近,这使我们更容易泛化新的模式并且使模型估计更加健壮。 分布式的向量表示在许多自然语言处理应用(如命名实体识别、消歧、词法分析、机器翻译)中非常有用。 1 模型 在MLlib中,Word2Vector使用skip-gram模型来实现。skip-gram的训练目标是学习词向量表示,这个表示可以很好的预测
通过 #[derive] 属性,编译器能够提供一些对于 trait 的基本实现。如果需要一个更复杂的业务,这些 trait 仍然可以手动实现。(原文:The compiler is capable of providing basic implementations for some traits via the #[derive] attribute. These traits can stil
当然 trait 也可以是泛型。我们在这里定义了一个实现 Drop 的 trait,作为泛型方法来 drop(丢弃) 它本身和输入参数。 // 不可复制的类型。 struct Empty; struct Null; // 用到 `T` 的trait 泛型。 trait DoubleDrop<T> { // 定义一个关于调用者的方法,接受一个额外的单一参量 `T`, // 且没有任何
问题内容: 我正在调整我的一个宠物项目以提高其性能。我已经淘汰了探查器以识别热点,但是我认为对Python性能特性的了解要好一些,这将非常有用。 我想知道几件事: 一些现代的编译器拥有非常聪明的优化器,它们通常可以采用简单的代码,并使其运行速度比任何人工调整代码的尝试都要快。根据优化器的智能程度,使我的代码“哑巴”可能更好。 尽管Python是一种“解释”语言,但它确实可以编译为某种形式的字节码(
问题内容: 答案通常归结为“使用具有root特权的第三方模块”或“使用系统的ping命令并解析输出”。在本地方法中,icmplib和M. Cowles和J. Diemer的ping.py 明确提到了对root特权的需求,以及scapy 手册。 因此,从这一方面来说,在本地发送没有特殊特权的ICMP ping似乎是不可能的。system ping命令确实以某种方式进行管理,但其手册页并未说明如何进行
问题内容: 我最近一直在尝试研究PHP,但发现自己迷上了特质。我了解水平代码重用的概念,并且不想一定要从抽象类继承。我不明白的是:使用特征和接口之间的关键区别是什么? 我曾尝试搜索一篇不错的博客文章或文章,解释何时使用一种或另一种,但到目前为止,我发现的示例似乎是如此相似,以至于完全相同。 问题答案: 接口定义了实现类 必须 实现的一组方法。 当一个特征被使用时,这些方法的实现也会随之而来-这在。