国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

數據挖掘算法概要

afishhhhh / 2041人閱讀

摘要:明確業務需求并選擇好針對性的數據是數據挖掘的先決條件。數據挖掘使用選擇好的數據挖掘算法對數據進行處理后得到信息。但它們的有機組合具有互補性,多方法融合將成為數據挖掘算法的發展趨勢。

前言

數據挖掘是通過對大量數據的清理及處理以發現信息,并應用于分類,推薦系統,預測等方面的過程。

覺得本文有幫助請點贊mark下。謝謝!

本文Github源碼,歡迎 star & fork

一、數據挖掘過程

1.數據選擇

分析業務需求后,選擇應用于需求業務相關的數據:業務原始數據、公開的數據集、也可通過爬蟲采集網站結構化的數據。明確業務需求并選擇好針對性的數據是數據挖掘的先決條件。

2.數據預處理

通常選擇好的數據會有噪音,不完整等缺陷,需要對數據進行清洗,缺失項處理,集成,轉換以及歸納:
python字符串處理(相當方便)、正則式匹配、pandas、beautifulsoup處理Html標簽等等工具。

3.特征工程/數據轉換

根據選擇的算法,對預處理好的數據提取特征,并轉換為特定數據挖掘算法的分析模型。

4.數據挖掘

使用選擇好的數據挖掘算法對數據進行處理后得到信息。

5.解釋與評價

對數據挖掘后的信息加以分析解釋,并應用于實際的工作領域。

二、數據挖掘常用算法簡介 1.關聯分析算法

關聯規則在于找出具有最小支持度閾值和最小置信度閾值的不同域的數據之間的關聯。在關聯規則的分析算法研究中,算法的效率是核心的問題。
經典的算法有:Apriori算法,AprioriTid算法,FP-growth算法;

2.分類算法

決策樹算法:以樹形結構表示分類或者決策集合,產生規則或者發現規律。主要有ID3算法,C4.5算法, SLIQ算法, SPRINT算法, RainForest算法;

樸素Bayes分類算法:利用Bayes定理概率統計的方法,選擇其中概率比較大的類別進行分類;

CBA(Classification Based on Association)算法:基于關聯規則的分類算法;

MIND(Mining in Database)算法 :采用數據庫中用戶定義的函數(user-definedfunction,簡稱UDF)來實現分類的算法;

神經網絡分類算法:利用訓練集對多個神經的網絡進行訓練,并用訓練好的模型對樣本進行分類;

粗集理論:粗集理論的特點是不需要預先給定某些特征或屬性的數量描述,而是直接從給定問題出發,通過不可分辨關系和不可分辨類確定問題的近似域,從而找出問題中的內在規律;

遺傳算法:遺傳算法是模擬生物進化過程,利用復制(選擇)、交叉(重組)和變異(突變)3個基本方法優化求解的技術;

3.聚類算法

聚類分析與分類不同,聚類分析處理的數據對象的類是未知的。聚類分析就是將對象集合分組為由類似的對象組成 的多個簇的過程。分為3類方法:

Ipartitioning method(劃分方法) 給定1個N個對象或者元組的數據庫,1個劃分方法構建數據的K個劃分,每1個劃分表示1個聚簇,并且K

hierarchical method(層次方法)
對給定數據對象集合進行層次的分解,經典算法是BIRTH算法;

grid based method(基于網格的方法) 這種方法采用一個多分辨率的網格數據結構。將空間量化為有限數目的單元,這些單元形成了網格結構,所有聚類分析都在網格上進行。常用的算法有STING,SkWAVECLUSTER和 CLIQUE;

小結

隨著數據量的日益積累以及數據庫種類的多樣化,各種數據挖掘方法作用范圍有限,都有局限性,因此采用單一方法難以得到決策所需的各種知識。但它們的有機組合具有互補性,多方法融合將成為數據挖掘算法的發展趨勢。

三、數據挖掘算法實現 1、相關知識 (1)距離度量:在數據挖掘中需要明確樣本數據相似度,通常可以計算樣本間的距離,如下為常用距離度量的介紹。

樣本數據以:

曼哈頓距離: 也稱曼哈頓街區距離,就如從街區的一個十字路口點到另一個十字路口點的距離,
二維空間(多維空間按同理擴展)用公式表示為

歐氏距離:表示為點到點的距離。二維空間(多維空間按同理擴展)的公式表示為

閔可夫斯基距離:是一組距離方法的概括,當 p=1 既是曼哈頓距離,當 p=2 既是歐氏距離。當p越大,單一維度的差值對整體的影響就越大。

閔可夫斯基距離(包括歐氏距離,曼哈頓距離)的優缺點:

優點:應用廣泛。

缺點:無法考慮各分量的單位以及各分量分布(方差,期望)的差異性。(其中個分量的單位差異可以使用數據的標準化來消除,下面會有介紹。)

余弦相關系數:樣本數據視為向量,通過兩向量間的夾角余弦值確認相關性,數值范圍[-1,1]。 -1表示負相關,0表示無關,1表示正相關。


余弦相關系數的優缺點:

優點:余弦相似度與向量的幅值無關,只與向量的方向相關,在文檔相似度(TF-IDF)和圖片相似性(histogram)計算上都有它的身影;
而且在樣本數值稀疏的時候仍可以使用。

缺點:余弦相似度受到向量的平移影響,上式如果將 x 平移到 x+1, 余弦值就會改變。(可以理解為受樣本的起始標準的影響,接下來介紹的皮爾遜相關系數可以消除這個影響)

皮爾遜相關系數:計算出了樣本向量間的相關性,數值范圍[-1,1]。

考慮計算的遍歷的次數,有一個替代公式可以近似計算皮爾遜相關系數:

皮爾遜相關系數優點:可消除每個分量標準不同(分數膨脹)的影響,具有平移不變性和尺度不變性。

(2)數據標準化:參考文章

各分量計算距離而各分量的單位尺度差異很大,可以使用數據標準化消除不同分量間單位尺度的影響,,加速模型收斂的效率,常用的方法有三種:

min-max 標準化:將數值范圍縮放到(0,1),但沒有改變數據分布。max為樣本最大值,min為樣本最小值。


z-score 標準化:將數值范圍縮放到0附近, 經過處理的數據符合標準正態分布。u是平均值,σ是標準差。


修正的標準z-score:修正后可以減少樣本數據異常值的影響。將z-score標準化公式中的均值改為中位數,將標準差改為絕對偏差。

其中asd絕對偏差:u為中位數,card(x)為樣本個數

(3) 算法的效果評估:

十折交叉驗證:將數據集隨機分割成十個等份,每次用9份數據做訓練集,1份數據做測試集,如此迭代10次。十折交叉驗證的關鍵在于較平均地分為10份。

N折交叉驗證又稱為留一法:用幾乎所有的數據進行訓練,然后留一個數據進行測試,并迭代每一數據測試。留一法的優點是:確定性。

2、協同過濾推薦算法 代碼實現、數據集及參考論文 電影推薦——基于用戶、物品的協同過濾算法
...
示例:
r = Recommendor()

print("items base協同推薦 slope one")
#items base協同推薦算法 Slope one
r.slope_one_recommendation("lyy")

print("items base協同推薦 cos")
#items base協同推薦算法  修正余弦相似度 
r.cos_recommendation("lyy")

print("users base協同推薦")
#userbase協同推薦算法 
r.user_base_recommendation("lyy")
(1)基于用戶的協同推薦算法

這個方法是利用相似用戶的喜好來進行推薦:如果要推薦一個樂隊給你,會查找一個和你類似的用戶,然后將他喜歡的樂隊推薦給你。

算法的關鍵在于找到相似的用戶,迭代計算你與每個用戶對相同樂隊的評分距離,來確定誰是你最相似的用戶,距離計算可以用曼哈頓距離,皮爾斯相關系數等等。

基于用戶的協同推薦算法算法的缺點:

擴展性:隨著用戶數量的增加,其計算量也會增加。這種算法在只有幾千個用戶的情況下能夠工作得很好,但達到一百萬個用戶時就會出現瓶頸。稀疏性:大多數推薦系統中,物品的數量要遠大于用戶的數量,因此用戶僅僅對一小部分物品進行了評價,這就造成了數據的稀疏性。比如亞馬遜有上百萬本書,但用戶只評論了很少一部分,于是就很難找到兩個相似的用戶了。

(2)基于物品的協同推薦算法

基于用戶的協同過濾是通過計算用戶之間的距離找出最相似的用戶(需要將所有的評價數據在讀取在內存中處理進行推薦),并將相似用戶評價過的物品推薦給目標用戶。而基于物品的協同過濾則是找出最相似的物品(通過構建一個物品的相似度模型來做推薦),再結合用戶的評價來給出推薦結果。

基于物品的協同推薦算法常用有如下兩種:

修正余弦相似度算法:

以物品的評分作為物品的屬性值,通過對比物品i,j的工有的用戶相對評分的計算相關性s(i,j)。與皮爾遜相關系數的原理相同,共有用戶對物品的每一評分R(u,j),R(u,i)需要減去該用戶評分的平均值R(`u)而消除分數膨脹。


修正余弦相似度的優點:通過構建物品模型的方式,擴展性好,占用內存小;消除分數膨脹的影響;

修正余弦相似度的缺點:稀疏性,需要基于用戶的評分數據;

Slope One推薦算法:

第一步,計算平均差值:

dev(i,j)為遍歷所有共有物品i,j的共有用戶u的評分平均差異。

card(Sj,i(X))則表示同時評價過物品j和i的用戶數。

第二歩,使用加權的Slope One算法:

PWS1(u)j表示我們將預測用戶u對物品j的評分。

求合集i屬于S(u)-j,用戶u所含的所有物品i(除了j以外)。

dev(i,j)為遍歷所有共有物品i,j的共有用戶u的評分平均差異。

C(ji)也就是card(Sj,i(X))表示同時評價過物品j和i的用戶數。

Slope One算法優點:算法簡單;擴展性好,只需要更新共有屬性的用戶評價,而不需要重新載入整個數據集。

Slope One算法的缺點:稀疏性,需要基于用戶的評分數據;

3、分類算法 (1)基于物品特征值的KNN分類算法 代碼實現 鳶尾花KNN分類算法
...

 # KNN算法
    def knn(self, oj_list):
        weight_dict = {"Iris-setosa":0.0, "Iris-versicolor":0.0, "Iris-virginica":0.0}
        for atuple in oj_list:
            weight_dict[atuple[1]] += (1.0 / atuple[0])
        rel_class = [(key, value) for key, value in weight_dict.items()]
        #print(sorted(rel_class, key=lambda x:x[1], reverse=True))
        rel_class = sorted(rel_class, key=lambda x:x[1], reverse=True)[0][0]
        return rel_class
        
...

前面我們討論的協同推薦算法需要在用戶產生的各種數據上面進行分析,因此也稱為社會化過濾算法,而這種算法通常有數據的稀疏性,算法可擴展性以及依賴于用戶的數據的缺點,而基于物品特征值分類算法可以改善這些問題。算法分為兩步:

第一步、選取特征值

算法的關鍵在于挑取有代表區分意義的特征及分值。以Iris花的示例,選取花萼長度, 花萼寬度,花瓣長度,花瓣寬度特征值。

第二歩、計算距離

比如計算測試集與訓練集特征值之間的曼哈頓距離,得到k個最近鄰后并通過加權后的結果預測分類。

KNN分類算法的缺點:無法對分類結果的置信度進行量化;是被動學習的算法,每次測試需要需要遍歷所有的訓練集后才能分類。

(2)貝葉斯分類算法 代碼實現 區分新聞類別樸素貝葉斯分類算法
...
def train_data(self):
        #訓練組的條件概率
        for word in self.vocabulary:
            for category,value in self.prob.items():
                if word not in self.prob[category]:
                    count = 0
                else :
                    count = self.prob[category][word]
                #優化條件概率公式
                self.prob[category][word] = (count + 1) / (self.total[category] + len(self.vocabulary)) 
                
...

貝葉斯分類算法是基于概率的分類算法。相比于KNN分類算法,它是主動學習的算法,它會根據訓練集建立一個模型,并用這個模型對新樣本進行分類,速度也會快很多。
貝葉斯分類算法的理論基礎是基于條件概率的公式(應用于現實中P(X|Y&Z)不直觀得出,而P(Y|X)*P(Z|X)比較直觀得出),并假設已存在的子事件(y,z...實際應用中會有多個)間是相互獨立的(因此也稱為樸素貝葉斯),當y,z事件假設為獨立便有:


如下舉例推測買牛奶和有機食品,再會買綠茶的概率:

第一步:計算先驗概率及條件概率

先驗概率:為多帶帶事件發生的概率,如P(買綠茶),P(有機食品)

條件概率(后驗概率):y事件已經發生,觀察y數據集后得出x發生的概率。如P(買有機食品|買綠茶),通過以下公式計算(nc表示y數據集下x的發生頻數,n為y數據集的總數):


上式存在一個缺陷,當一個條件概率 P(y|x)為0時,整體的預測結果P(x) P(y|x) P(z|x)只能為0,這樣便不能更全面地預測。

修正后的條件概率:(公式摘自Tom Mitchell《機器學習》。m是一個常數,表示等效樣本大小。決定常數m的方法有很多,我們這里可以使用預測結果的類別來作為m,比如投票有贊成和否決兩種類別,所以m就為2。p則是相應的先驗概率,比如說贊成概率是0.5,那p(贊成)就是0.5。):

第二歩:根據貝葉斯公式做出預測

由公式計算比較y&z事件發生下,不同x事件發生的概率差異,如得出P(x=喜歡),P(x=不喜歡) 的概率大小,預測為概率比較大的事件。
因為P(y)*p(z)在上式都一樣,因此公式可以簡化為計算概率最大項而預測分類:

貝葉斯算法的優點:能夠給出分類結果的置信度;它是一種主動學習算法,速度更快。

貝葉斯算法的缺點:需要特定格式;數值型數據需要轉換為類別計算概率或用高斯分布計算概率;

(2)邏輯回歸分類算法 代碼實現 區分貓的圖片

注:邏輯回歸分類算法待后續加入網絡層,更新為神經網絡分類算法。

...
# cost函數,計算梯度
def propagate(w, b, X, Y):
    m = X.shape[1]      
    A = sigmoid(np.dot(w.T, X) + b)            
    cost = -1 / m * np.sum(Y * np.log(A) + (1 - Y) * np.log(1 - A))        
    dw = 1 / m * np.dot(X, (A - Y).T)  
    db = 1 / m * np.sum(A - Y) 
...    

邏輯回歸分類算法實現了輸入特征向量X,而輸出Y(范圍0~1)預測X的分類。

第一步,得到關于X線性回歸函數

可以通過線性回歸得到WX + b,其中W是權重,b是偏差值。但不能用本式表述預測的值,因為輸出Y的值需要在(0~1)區間;

第二歩,通過激活函數轉換

激活函數的特點是可以將線性函數轉換為非線性函數,并且有輸出值有限,可微分,單調性的特點。本例使用sigmoid,使輸出為預測值Y=sigmoid(WX+b);

第三歩,構建Cost函數

訓練W,b更好的預測真實的類別需要構建Cost代價函數,y^為sigmoid(WX+b)的預測分類值,y為實際分類值(0或者1):

其中L(y^,y)稱為損失函數

訓練的目的就是為了讓L(y^,y)足夠小,也就是當y實際分類值為1時,y^要盡量偏向1。y實際分類值為0時,y^盡量小接近0。

第四步,梯度下降得到Cost函數的極小值


通過對W,b兩個參數求偏導,不斷迭代往下坡的的位置移動(對w,b值往極小值方向做優化,其中α為學習率控制下降的幅度),全局最優解也就是代價函數(成本函數)J (w,b)這個凸函數的極小值點。

第五步、通過訓練好的W,b預測分類。

4、聚類算法 (1)層次聚類 代碼實現 狗的種類層次聚類

層次聚類將每條數據都當作是一個分類,每次迭代的時候合并距離最近的兩個分類,直到剩下一個分類為止。

(2)K-means++聚類 代碼實現 Kmean++聚類

注:Kmean算法與Kmean++區別在于初始的中心點是直接隨機選取k各點。

        ...
        #kmean初始化隨機k個中心點
        #random.seed(1)
        #center = [[self.data[i][r] for i in range(1, len((self.data)))]  
                  #for r in random.sample(range(len(self.data)), k)]
            
        # Kmean ++ 初始化基于距離份量隨機選k個中心點
        # 1.隨機選擇一個點
        center = []
        center.append(random.choice(range(len(self.data[0]))))
        # 2.根據距離的概率選擇其他中心點
        for i in range(self.k - 1):
            weights = [self.distance_closest(self.data[0][x], center) 
                     for x in range(len(self.data[0])) if x not in center]
            dp = [x for x in range(len(self.data[0])) if x not in center]
            total = sum(weights)
            #基于距離設定權重
            weights = [weight/total for weight in weights]
            num = random.random()
            x = -1
            i = 0
            while i < num :
                x += 1
                i += weights[x]
            center.append(dp[x])
        ... 

k-means++算法可概括為:

(1)基于各點到中心點得距離分量,依次隨機選取到k個元素作為中心點:
先隨機選擇一個點。重復以下步驟,直到選完k個點。

計算每個數據點dp(n)到各個中心點的距離(D),選取最小的值D(dp);

根據D(dp)距離所占的份量來隨機選取下一個點作為中心點。

(2)根據各點到中心點的距離分類;

(3)計算各個分類新的中心點。
重復(2、3),直至滿足條件。


參考文獻

數據挖掘算法概述

面向程序員數據挖掘指南

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42955.html

相關文章

  • 數據挖掘算法概要

    摘要:明確業務需求并選擇好針對性的數據是數據挖掘的先決條件。數據挖掘使用選擇好的數據挖掘算法對數據進行處理后得到信息。但它們的有機組合具有互補性,多方法融合將成為數據挖掘算法的發展趨勢。 前言 數據挖掘是通過對大量數據的清理及處理以發現信息,并應用于分類,推薦系統,預測等方面的過程。 覺得本文有幫助請點贊mark下。謝謝! 本文Github源碼,歡迎 star & fork 一、數據挖掘過程...

    zhunjiee 評論0 收藏0
  • 開發人員面試工作經驗大綱

    摘要:系統分析員向用戶再次確認需求。我在公司進行了在線教育系統的開發,所在的團隊有個人,包括項目經理系統分析人員架構師開發人員數據庫設計人員前端開發人員測試人員等,軟件周期從需求分析概要設計詳細設計編碼測試軟件交付用戶驗收維護,大概花了個月。 面試時可能問到的公司情況:包括公司的地址,什么時候創建的,公司的規模(小公司、中型公司、大公司),公司的人員(主要講開發團隊,包括項目經理,項目主管,...

    wangym 評論0 收藏0
  • hibernate學習概要

    摘要:一中實體規則實體類創建的注意事項持久化類提供無參數構造成員變量私有,提供方法訪問,需提供屬性屬性就是方法持久化類中的屬性,應盡量使用包裝類型可以表示,在插如數據庫中有作用持久化類需要提供主鍵屬性與數據庫中主鍵列對應不需要修飾原因使用代理生成 一、hibernate中實體規則 實體類創建的注意事項 1.持久化類提供無參數構造2.成員變量私有,提供get、set方法訪問,需提供屬性(屬性就...

    Noodles 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<