Spark 分布式實(shí)現(xiàn)距離判別分析

Spark 分布式實(shí)現(xiàn)距離判別分析

距離判別

設(shè)有兩個(gè)總體G1檬果,G2朝扼,從第一個(gè)總體抽取n個(gè)樣本,從第二個(gè)總體中抽取m個(gè)樣本量愧,每個(gè)樣本都有p個(gè)測量指標(biāo)淫半。取任一樣本實(shí)測指標(biāo)為X=(x1,x2,……xp)'溃槐,分別計(jì)算X到兩個(gè)總體的距離D1,D2,按距離最近準(zhǔn)則判別歸類科吭。
距離計(jì)算公式(馬氏距離):

在這里插入圖片描述

判別公式:
判別分析

數(shù)據(jù)展示與說明

在這里插入圖片描述

某商場從市場隨機(jī)抽取20中品牌的電視機(jī)進(jìn)行調(diào)查昏滴,其中13中暢銷,7種滯銷对人。按照電視機(jī)的質(zhì)量評分影涉、功能評分、價(jià)格手機(jī)資料规伐。其中“1”表示暢銷蟹倾,“2”表示滯銷,根據(jù)該樣本建立判別函數(shù),對以后的新樣本進(jìn)行評測鲜棠。

實(shí)現(xiàn)過程

首先也是要自定義一個(gè)計(jì)算樣本均值向量的自定義聚合函數(shù)肌厨,同上一篇

然后按照公式進(jìn)行計(jì)算

def main(args: Array[String]): Unit = {

    val spark = SparkSession
      .builder()
      .appName(s"${this.getClass.getSimpleName}")
      .master("local[*]")
      .getOrCreate()

    import spark.implicits._

    val sc = spark.sparkContext

    val irisData = spark.read
      .option("header", true)
      .option("inferSchema", true)
      .csv("F:\\DataSource\\dda.txt")

    val schema = irisData.schema
    val fts = schema.filterNot(_.name == "class").map(_.name).toArray

    val amountVectorAssembler: VectorAssembler = new VectorAssembler()
      .setInputCols(fts)
      .setOutputCol("features")

    val vec2Array = udf((vec: DenseVector) => vec.toArray)

    val irisFeatrus = amountVectorAssembler
      .transform(irisData)
      .select($"class", vec2Array($"features") as "features")

    val ui = spark.udf.register("udafMedian", new meanVector(fts.length))

    // 計(jì)算樣本均值向量
    val uiGroup = irisFeatrus
      .groupBy($"class")
      .agg(ui($"features") as "ui", count($"class") as "len")

    // 類別、協(xié)方差矩陣豁陆、均值向量
    val covMatrix = irisFeatrus
      .join(uiGroup, "class")
      .rdd
      .map(row => {
        val lable = row.getAs[String]("class")
        val len = row.getAs[Long]("len")
        val u = densevec(row.getAs[Seq[Double]]("ui").toArray)
        val x = densevec(row.getAs[Seq[Double]]("features").toArray)
        val denseMatrix = (x - u).toDenseMatrix
        lable -> (denseMatrix, u, len)
      })
      .reduceByKey((d1, d2) => {
        (DenseMatrix.vertcat(d1._1, d2._1), d1._2, d1._3)
      })
      .map(tp => {
        val len = tp._2._3 - 1
        val t: DenseMatrix[Double] = (tp._2._1.t * tp._2._1).map(x => x / len)
        (tp._1, t, tp._2._2)
      })

    val covmBroad = sc.broadcast(covMatrix.collect())

    // 定義判別函數(shù)
    def dfunction(vec: Seq[Double]) = {
      covmBroad.value
        .map(tp => {
          val xui = (densevec(vec.toArray) - tp._3).toDenseMatrix
          val d = (xui * inv(tp._2) * xui.t).data.head
          (d, tp._1)
        })
        .minBy(_._1)
        ._2
    }
    val nGudf = udf((vec: Seq[Double]) => dfunction(vec))


  val predictions =   irisFeatrus
      .withColumn("nG", nGudf($"features"))

    predictions.show(truncate = false)

    spark.stop()
  }

結(jié)果查看:從結(jié)果可以看到柑爸,僅有一列判別錯(cuò)誤


在這里插入圖片描述

參考資料:

《多元統(tǒng)計(jì)分析及R語言建模》 – 王斌會

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盒音,一起剝皮案震驚了整個(gè)濱河市表鳍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌祥诽,老刑警劉巖譬圣,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異雄坪,居然都是意外死亡厘熟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門维哈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绳姨,“玉大人,你說我怎么就攤上這事阔挠∑” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵购撼,是天一觀的道長跪削。 經(jīng)常有香客問我,道長份招,這世上最難降的妖魔是什么切揭? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任狞甚,我火速辦了婚禮锁摔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哼审。我一直安慰自己谐腰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布涩盾。 她就那樣靜靜地躺著十气,像睡著了一般。 火紅的嫁衣襯著肌膚如雪春霍。 梳的紋絲不亂的頭發(fā)上砸西,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼芹枷。 笑死衅疙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鸳慈。 我是一名探鬼主播饱溢,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼走芋!你這毒婦竟也來了绩郎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤翁逞,失蹤者是張志新(化名)和其女友劉穎肋杖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熄攘,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兽愤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挪圾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浅萧。...
    茶點(diǎn)故事閱讀 40,498評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖哲思,靈堂內(nèi)的尸體忽然破棺而出洼畅,到底是詐尸還是另有隱情,我是刑警寧澤棚赔,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布帝簇,位于F島的核電站,受9級特大地震影響靠益,放射性物質(zhì)發(fā)生泄漏丧肴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一胧后、第九天 我趴在偏房一處隱蔽的房頂上張望芋浮。 院中可真熱鬧,春花似錦壳快、人聲如沸纸巷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘤旨。三九已至,卻和暖如春竖伯,著一層夾襖步出監(jiān)牢的瞬間存哲,已是汗流浹背因宇。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祟偷,地道東北人羽嫡。 一個(gè)月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像肩袍,于是被迫代替她去往敵國和親杭棵。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容