CREATE model modelname options(model_type='logistic_reg', label='rating') AS SELECT * FROM movie_rating;
若要在CREATE MODEL
语句中定义自定义数据预处理,请将TRANSFORM
子句与任意数量的可用转换函数结合使用。 这些手动预处理函数也可以在TRANSFORM
子句之外使用。 可以使用下面🔗的转换器部分中讨论的所有转换来手动预处理数据。
关键特性 key-characteristics
下面是定义预处理函数时要考虑的特征转换的主要特征:
TRANSFORM(
string_imputer(language, 'adding_null') AS imp_language,
numeric_imputer(users_count, 'mode') AS imp_users_count,
string_indexer(imp_language) AS si_lang,
vector_assembler(array(imp_users_count, si_lang, watch_minutes)) AS features
OPTIONS(MODEL_TYPE='logistic_reg', LABEL='rating')
AS SELECT * FROM df;
有19种可用的转换。 这些转换被拆分为常规转换、数值转换、分类转换和文本转换。
请阅读此部分,了解有关用于各种数据类型的转换器的详细信息。 如果您需要应用并非特定于分类或文本数据的转换,则此信息至关重要。
输入数据类型是指应用估算的列。 输出数据类型是指转换生效后作为输出生成的列。
数值输入器 numeric-imputer
数值输入器 转换器完成数据集中缺少值的操作。 这使用缺失值所在列的平均值、中间值或模式。 输入列应为DoubleType
或FloatType
。 可在Spark算法文档中找到更多信息和示例。
输入列中的所有null值都被视为缺失,因此也会被推断。
矢量组合器 vector-assembler
VectorAssembler
转换器将指定的输入列列表合并为单个矢量列,从而更容易管理机器学习模型中的多个功能。 这对于将原始特征和由不同特征变换器生成的特征合并到一个统一特征向量中特别有用。 VectorAssembler
接受数字、布尔和矢量类型的输入列。 在每一行中,输入列的值以指定顺序串连到向量中。
阅读此部分以了解用于处理和缩放数值数据的可用转换器。 这些转换器是处理和优化数据集中的数值功能所必需的。
二进制化程序 binarizer
Binarizer
转换器通过称为二进制化的过程将数字特征转换为二进制(0/1)特征。 大于指定阈值的特征值将转换为1.0,而等于或小于阈值的值将转换为0.0。Binarizer
支持输入列的Vector
和Double
类型。
Bucketizer bucketizer
Bucketizer
转换器根据用户指定的阈值将连续功能列转换为功能桶列。 此过程对于将连续数据分段到离散的二进制文件桶或存储桶非常有用。 Bucketizer
需要定义存储桶边界的splits
参数。
splits
用于将连续特征映射到存储桶中的参数。 通过n+1
拆分,有n
桶。 拆分必须严格按照递增的顺序进行,并且范围(x,y)用于每个分段,最后一个分段除外,包括y。
数组(双精度)
MaxAbsScaler maxabsscaler
MaxAbsScaler
转换器将矢量行数据集中的每个功能重新缩放到范围[-1, 1],方法是除以每个功能的最大绝对值。 此转换非常适合于保留具有正值和负值的数据集中的稀疏性,因为它不会移动或居中数据。 这使MaxAbsScaler
特别适合于对输入特征尺度敏感的模型,例如涉及距离计算的模型。
规范化器 normalizer
Normalizer
是一个转换器,它将矢量行数据集中的每个矢量标准化为具有单位范数。 此过程可确保一致的缩放而不改变矢量的方向。 这种变换在依赖于距离测量或其他基于向量的计算的机器学习模型中特别有用,特别是在向量的大小发生显着变化时。
QuantileDiscretizer quantilediscretizer
QuantileDiscretizer
是一个转换器,它将具有连续特征的列转换为捆绑的分类特征,其二进制文件数由numBuckets
参数决定。 在某些情况下,如果非重复值太少而无法创建足够的数量,则实际存储段数可能小于该指定数。
此转换对于简化连续数据的表示或为更好地处理分类输入的算法做好准备特别有用。
StandardScaler standardscaler
StandardScaler
是一个转换器,它将矢量行数据集中的每个功能标准化为具有单位标准差和/或平均数零。 这个过程使得数据更适合于假设特征以一致尺度围绕零的算法。 这种转换对于SVM、Logistic回归和神经网络等机器学习模型尤其重要,在这些模型中,未标准化的数据可能导致收敛问题或降低精度。
阅读本节内容,了解为机器学习模型转换和预处理分类数据而设计的可用转换器。 这些转换针对的是表示不同类别或标签的数据点,而不是数值。
StringIndexer stringindexer
StringIndexer
是一个转换器,它将标签字符串列编码为数字索引列。 索引范围从0到numLabels
,并按标签频率排序(最常见的标签收到索引0)。 如果输入列是数字,则在编制索引前会将其转换为字符串。 如果用户指定了不可见标签,则可以将这些标签分配给索引numLabels
。
此转换对于将分类字符串数据转换为数字形式特别有用,因此它适用于需要数字输入的机器学习模型。
OneHotEncoder onehotencoder
OneHotEncoder
是一个转换器,它将标签索引列转换为稀疏二进制向量列,其中每个向量最多有一个单值。 此编码对于允许需要数值输入的算法(如Logistic回归)有效地合并分类数据特别有用。
文本转换 textual-transformations
本节详细介绍可用于处理文本数据并将文本数据转换为机器学习模型可以使用的格式的转换器。 此部分对于处理自然语言数据和文本分析的开发人员至关重要。
CountVectorizer countvectorizer
CountVectorizer
是一个转换器,它将文本文档的集合转换为令牌计数的矢量,基于从语料库中提取的词汇生成稀疏表示。 此转换对于将文本数据转换为机器学习算法(例如LDA(潜在狄利克雷分配))可以使用的数字格式至关重要,因为它表示每个文档中的令牌频率。
NGram ngram
NGram
是生成n元语法序列的转换器,其中n元语法是某个整数(𝑛
)的('??')令牌序列(通常是词)。 输出由以空格分隔的“??”连续单词字符串组成,这些字符串可用作机器学习模型(特别是侧重于自然语言处理的模型)中的特征。
StopWordsRemover stopwordsremover
StopWordsRemover
是一个转换器,它从字符串序列中删除停用词,过滤掉没有重要意义的常用词。 它将一系列字符串(如Tokenizer的输出)作为输入,并删除由stopWords
参数指定的所有停用词。
此转换有助于预处理文本数据,通过消除对整体意义贡献不大的单词来提高下游机器学习模型的有效性。
TF-IDF tf-idf
TF-IDF
(术语频率 — 逆文档频率)是用于测量文档中单词相对于语料库的重要性的转换器。 术语频率(TF)是指术语(t)出现在文档(d)中的次数,而文档频率(DF)则测量语料库中(D)包含术语(t)的文档数量。 这种方法在文本挖掘中广泛使用,以减少“a”、“the”和“of”等带有少量唯一信息的常见单词的影响。
此转换在文本挖掘和自然语言处理任务中特别有用,因为它为文档内和整个语料库中的每个单词的重要性分配一个数值。
Tokenizer tokenizer
Tokenizer
是将文本(如句子)划分为单个术语(通常是单词)的转换器。 它将句子转换为令牌数组,为文本预处理提供了一个基本步骤,为进一步的文本分析或建模过程准备数据。
Word2Vec word2vec
Word2Vec
是一个估计器,它处理表示文档的词序列并训练Word2VecModel
。 此模型将每个单词映射到一个唯一的固定大小的矢量上,并通过平均文档中所有单词的矢量将每个文档转换为一个矢量。 Word2Vec
在自然语言处理任务中广泛使用,它创建可捕获语义含义的单词内嵌,将文本数据转换为表示单词之间关系的数字向量,并实现更有效的文本分析和机器学习模型。