spark mllib 特征学习笔记 (二)

当然,请继续介绍其他特征处理方法的公式、适用场景和案例:

10. StringIndexer

公式

将字符串类型的标签转换为数值索引:
StringIndexer ( x ) = { 0 , 1 , 2 , ... , N − 1 } \text{StringIndexer}(x) = \{0, 1, 2, \ldots, N-1\} StringIndexer(x)={0,1,2,...,N−1}

适用场景

用于将分类标签转换为数值标签,以便机器学习算法处理。

案例

python 复制代码
from pyspark.ml.feature import StringIndexer

data = spark.createDataFrame([(0, "a"), (1, "b"), (2, "c"), (3, "a"), (4, "a"), (5, "c")], ["id", "category"])
indexer = StringIndexer(inputCol="category", outputCol="categoryIndex")
indexedData = indexer.fit(data).transform(data)
indexedData.show()

11. VectorAssembler

公式

将多个特征列合并成一个特征向量:
VectorAssembler ( x 1 , x 2 , ... , x n ) = [ x 1 , x 2 , ... , x n ] \text{VectorAssembler}(\mathbf{x}_1, \mathbf{x}_2, \ldots, \mathbf{x}_n) = [\mathbf{x}_1, \mathbf{x}_2, \ldots, \mathbf{x}_n] VectorAssembler(x1,x2,...,xn)=[x1,x2,...,xn]

适用场景

用于将多个特征列合并成一个特征向量,作为机器学习算法的输入。

案例

python 复制代码
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.linalg import Vectors

data = spark.createDataFrame([(1, 2, 3), (4, 5, 6)], ["a", "b", "c"])
assembler = VectorAssembler(inputCols=["a", "b", "c"], outputCol="features")
assembledData = assembler.transform(data)
assembledData.show()

12. Word2Vec

公式

Word2Vec 是一种词嵌入模型,通过训练将单词映射到低维向量空间:
Word2Vec ( sentence ) = v \text{Word2Vec}(\text{sentence}) = \mathbf{v} Word2Vec(sentence)=v

其中 (\mathbf{v}) 是单词的向量表示。

适用场景

用于自然语言处理中的词语表示学习,以便后续应用于文本分类、文本相似度等任务。

案例

python 复制代码
from pyspark.ml.feature import Word2Vec

data = spark.createDataFrame([
    ("Hi I heard about Spark".split(" "),),
    ("I wish Java could use case classes".split(" "),),
    ("Logistic regression models are neat".split(" "),)
], ["text"])

word2Vec = Word2Vec(vectorSize=3, minCount=0, inputCol="text", outputCol="result")
model = word2Vec.fit(data)
result = model.transform(data)
result.show(truncate=False)

这些例子展示了 PySpark MLlib 中几种常用的特征处理方法的基本用法和应用场景。根据具体的数据和任务需求,选择合适的特征处理方法可以有效地提高模型的性能和准确性。

当然,请继续介绍其他特征处理方法的公式、适用场景和案例:

13. UnivariateFeatureSelector

公式

基于单变量统计测试选择特征,例如卡方检验:
UnivariateFeatureSelector ( X , y ) = { features with highest score } \text{UnivariateFeatureSelector}(X, y) = \{ \text{features with highest score} \} UnivariateFeatureSelector(X,y)={features with highest score}

适用场景

用于基于单变量统计测试(如卡方检验)选择与标签相关性最高的特征。

案例

python 复制代码
from pyspark.ml.feature import UnivariateFeatureSelector
from pyspark.ml.linalg import Vectors

data = [(1, Vectors.dense(0.0, 1.1, 0.1)),
        (0, Vectors.dense(2.0, 1.0, -1.0)),
        (0, Vectors.dense(2.0, 1.3, 1.0)),
        (1, Vectors.dense(0.0, 1.2, -0.5))]
df = spark.createDataFrame(data, ["label", "features"])

selector = UnivariateFeatureSelector(featuresCol="features", outputCol="selectedFeatures", labelCol="label", selectionMode="numTopFeatures", numTopFeatures=1)
result = selector.fit(df).transform(df)
result.show()

14. VarianceThresholdSelector

公式

基于方差选择特征,移除方差低于阈值的特征:
VarianceThresholdSelector ( X ) = { features with variance above threshold } \text{VarianceThresholdSelector}(X) = \{ \text{features with variance above threshold} \} VarianceThresholdSelector(X)={features with variance above threshold}

适用场景

用于移除方差较低的特征,以减少噪声对模型的影响。

案例

python 复制代码
from pyspark.ml.feature import VarianceThresholdSelector
from pyspark.ml.linalg import Vectors

data = [(1, Vectors.dense(0.0, 1.0, 0.0)),
        (0, Vectors.dense(0.0, 1.0, 1.0)),
        (0, Vectors.dense(0.0, 1.0, 0.0))]
df = spark.createDataFrame(data, ["label", "features"])

selector = VarianceThresholdSelector(featuresCol="features", outputCol="selectedFeatures", threshold=0.0)
result = selector.fit(df).transform(df)
result.show()

15. VectorIndexer

公式

索引化向量中的类别特征列:
VectorIndexer ( X ) = { indexed features } \text{VectorIndexer}(X) = \{ \text{indexed features} \} VectorIndexer(X)={indexed features}

适用场景

用于处理数据集中的向量特征,自动识别并索引类别特征。

案例

python 复制代码
from pyspark.ml.feature import VectorIndexer
from pyspark.ml.linalg import Vectors

data = [(Vectors.dense(1.0, 2.0, 3.0),),
        (Vectors.dense(2.0, 5.0, 6.0),),
        (Vectors.dense(1.0, 8.0, 9.0),)]
df = spark.createDataFrame(data, ["features"])

indexer = VectorIndexer(inputCol="features", outputCol="indexed", maxCategories=2)
indexedData = indexer.fit(df).transform(df)
indexedData.show()

16. VectorSizeHint

公式

添加向量列的大小信息到元数据中:
VectorSizeHint ( X ) = { features with size hint in metadata } \text{VectorSizeHint}(X) = \{ \text{features with size hint in metadata} \} VectorSizeHint(X)={features with size hint in metadata}

适用场景

用于在向量列中添加大小信息,以提供给后续流水线阶段使用。

案例

python 复制代码
from pyspark.ml.feature import VectorSizeHint
from pyspark.ml.linalg import Vectors

data = [(Vectors.dense([1.0, 2.0]),),
        (Vectors.dense([2.0, 3.0]),)]
df = spark.createDataFrame(data, ["features"])

sizeHint = VectorSizeHint(inputCol="features", size=2)
sizeHint.transform(df).show()

这些例子展示了更多 PySpark MLlib 中特征处理方法的公式、适用场景和简单案例。每种方法都有其特定的数学原理和适用范围,根据具体任务的需求选择合适的方法可以提高数据处理的效率和模型的预测性能。

相关推荐
Tassel_YUE15 分钟前
linux修改内核实现禁止被ping
linux·运维·笔记
sealaugh3236 分钟前
spring boot(学习笔记第十二课)
spring boot·笔记·学习
观鉴词recommend1 小时前
【c++刷题笔记-贪心】day28: 134. 加油站 、 135. 分发糖果 、860.柠檬水找零 、 406.根据身高重建队列
c++·笔记·算法·leetcode
会翻身的嵌入式咸鱼1 小时前
蓝桥杯开发板STM32G431RBT6高阶HAL库学习FreeRtos——完成第一个小项目点灯
stm32·学习·蓝桥杯
Alice_JC1 小时前
《昇思25天学习打卡营第11天|计算机视觉-ResNet50迁移学习》
深度学习·学习·计算机视觉·迁移学习
玉标1 小时前
ELK日志系统和Filebeat采集器的学习总结
学习·elk
祖国的好青年1 小时前
基于正点原子FreeRTOS学习笔记——时间片调度实验
笔记·学习
xiaoyalian2 小时前
横截面数据回归
笔记·学习·数据挖掘·回归·r语言
王红花x2 小时前
STL——list模拟实现
c++·学习·list
家有狸花2 小时前
PYTHON自学笔记(一)vscode配置
笔记·vscode·python