Discrete Cosine Transform [DCT] (离散余弦变换)
描述:Binarizer是一个Transformer。
离散余弦变换是与傅里叶变换相关的一种变换,它类似于离散傅立叶变换但是只使用实数。离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,这个离散傅里叶变换是对一个实偶函数进行的(因为一个实偶函数的傅里叶变换仍然是一个实偶函数)。
参数信息
参数描述
备注
其他
setInputCol
String
DF中待变换的特征,类型为:vector
setOutputCol
String
转换后的类型为:vector
setInverse
Boolean
true:执行反DCT,false:执行正向DCT
默认值:false
程序示例:
def getDataFrame(sparkSession: SparkSession = this.getSparkSession()): DataFrame = {
sparkSession.createDataFrame(Seq(
(0, Vectors.dense(0.0, 1.0, -2.0, 3.0)),
(1, Vectors.dense(-1.0, 2.0, 4.0, -7.0)),
(2, Vectors.dense(14.0, -2.0, -5.0, 1.0))
))
.toDF("id", "features")
}
def execute(dataFrame: DataFrame) = {
//特征名称
var feature = "words"
var feature_new = "words_count_vectorizer"
//设置模型
val dct = new DCT()
.setInputCol("features") //待变换的特征
.setOutputCol("features_dtc") //变换后的特征名称
.setInverse(false) //true:执行反DCT,false:执行正向DCT.默认值:false
//模型测试
var transform = dct.transform(dataFrame)
//show
transform.show(100, 100)
dataFrame.show(false)
}
数据结果:
+---+--------------------+----------------------------------------------------------------+
| id| features| features_dtc|
+---+--------------------+----------------------------------------------------------------+
| 0| [0.0,1.0,-2.0,3.0]|[1.0,-1.1480502970952693,2.0000000000000004,-2.7716385975338604]|
| 1| [-1.0,2.0,4.0,-7.0]| [-1.0,3.378492794482933,-7.000000000000001,2.9301512653149677]|
| 2|[14.0,-2.0,-5.0,1.0]| [4.0,9.304453421915744,11.000000000000002,1.5579302036357163]|
+---+--------------------+----------------------------------------------------------------+
实际应用例子:
离散余弦变换,经常被信号处理和图像处理使用,用于对信号和图像(包括静止图像和运动图像)进行有损数据压缩