Spark中常用的演算法

2021-09-22 06:01:02 字數 3331 閱讀 1756

spark中常用的演算法:

分類演算法屬於監督式學習,使用類標籤已知的樣本建立乙個分類函式或分類模型,應用分類模型,能把資料庫中的類標籤未知的資料進行歸類。分類在資料探勘中是一項重要的任務,目前在商業上應用最多,常見的典型應用場景有流失**、精確營銷、客戶獲取、個性偏好等。mllib 目前支援分類演算法有:邏輯回歸、支援向量機、樸素貝葉斯和決策樹。

案例:匯入訓練資料集,然後在訓練集上執行訓練演算法,最後在所得模型上進行**並計算訓練誤差。

import org.apache.spark.sparkcontext

import org.apache.spark.mllib.classification.svmwithsgd

import org.apache.spark.mllib.regression.labeledpoint

// 載入和解析資料檔案

val data = sc.textfile("mllib/data/sample_svm_data.txt")

val parseddata = data.map

// 設定迭代次數並進行進行訓練

val numiterations = 20

val model = svmwithsgd.train(parseddata, numiterations)

// 統計分類錯誤的樣本比例

val labelandpreds = parseddata.map

val trainerr = labelandpreds.filter(r => r._1 != r._2).count.todouble / parseddata.count

println("training error = " + trainerr)

回歸演算法屬於監督式學習,每個個體都有乙個與之相關聯的實數標籤,並且我們希望在給出用於表示這些實體的數值特徵後,所**出的標籤值可以盡可能接近實際值。mllib 目前支援回歸演算法有:線性回歸、嶺回歸、lasso和決策樹。

案例:匯入訓練資料集,將其解析為帶標籤點的rdd,使用 linearregressionwithsgd 演算法建立乙個簡單的線性模型來**標籤的值,最後計算均方差來評估**值與實際值的吻合度。

import org.apache.spark.mllib.regression.linearregressionwithsgd

import org.apache.spark.mllib.regression.labeledpoint

// 載入和解析資料檔案

val data = sc.textfile("mllib/data/ridge-data/lpsa.data")

val parseddata = data.map

//設定迭代次數並進行訓練

val numiterations = 20

val model = linearregressionwithsgd.train(parseddata, numiterations)

// 統計回歸錯誤的樣本比例

val valuesandpreds = parseddata.map

val mse = valuesandpreds.map.reduce(_ + _)/valuesandpreds.count

println("training mean squared error = " + mse)

聚 類演算法屬於非監督式學習,通常被用於探索性的分析,是根據「物以類聚」的原理,將本身沒有類別的樣本聚集成不同的組,這樣的一組資料物件的集合叫做簇,並 且對每乙個這樣的簇進行描述的過程。它的目的是使得屬於同一簇的樣本之間應該彼此相似,而不同簇的樣本應該足夠不相似,常見的典型應用場景有客戶細分、客 戶研究、市場細分、價值評估。mllib 目前支援廣泛使用的kmmeans聚類演算法。

案例:匯入訓練資料集,使用 kmeans 物件來將資料聚類到兩個類簇當中,所需的類簇個數會被傳遞到演算法中,然後計算集內均方差總和 (wssse),可以通過增加類簇的個數 k 來減小誤差。 實際上,最優的類簇數通常是 1,因為這一點通常是wssse圖中的 「低谷點」。

import org.apache.spark.mllib.clustering.kmeans

// 載入和解析資料檔案

val data = sc.textfile("kmeans_data.txt")

val parseddata = data.map( _.split(' ').map(_.todouble))

// 設定迭代次數、類簇的個數

val numiterations = 20

val numclusters = 2

// 進行訓練

val clusters = kmeans.train(parseddata, numclusters, numiterations)

// 統計聚類錯誤的樣本比例

val wssse = clusters.computecost(parseddata)

println("within set sum of squared errors = " + wssse)

協同過濾常被應用於推薦系統,這些技術旨在補充使用者-商品關聯矩陣中所缺失的部分。mllib當前支援基於模型的協同過濾,其中使用者和商品通過一小組隱語義因子進行表達,並且這些因子也用於**缺失的元素。

案例:匯入訓練資料集,資料每一行由乙個使用者、乙個商品和相應的評分組成。假設評分是顯性的,使用預設的als.train()方法,通過計算**出的評分的均方差來評估這個推薦模型。

import org.apache.spark.mllib.recommendation.als

import org.apache.spark.mllib.recommendation.rating

// 載入和解析資料檔案

val data = sc.textfile("mllib/data/als/test.data")

val ratings = data.map(_.split(',') match )

// 設定迭代次數

val numiterations = 20

val model = als.train(ratings, 1, 20, 0.01)

// 對推薦模型進行評分

val usersproducts = ratings.map

val predictions = model.predict(usersproducts).map

val ratesandpreds = ratings.map.join(predictions)

val mse = ratesandpreds.map.reduce(_ + _)/ratesandpreds.count

println("mean squared error = " + mse)

php中常用的演算法

1 氣泡排序法 介紹 氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,依次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越來越小的元素會經由交換慢慢 浮 到數列的頂端。步驟 比較相鄰的...

leetcode中常用的演算法簡介

1.binary search 二分法檢索 binary search 又稱折半檢索,二分法檢索的基本思想是設字典中的元素從小到大有序地存放在 陣列 array 中,首先將給定值key與字典中間位置上元素的關鍵碼 key 比較,如果相等,則檢索成功 否則,若key小,則在字典前半部分中繼續進行二分法...

演算法中常用的數字操作

void swap int a,int b float max float a,float b,float c int nomberof1 int n return count 正數使用原始碼表示,負數使用補碼表示。在c語言中,整數右移則左側填充符號位的值 整數左移,右側填充0。c語言在16位的編譯...