數(shù)據(jù)挖掘與算法分析概述_第1頁
數(shù)據(jù)挖掘與算法分析概述_第2頁
數(shù)據(jù)挖掘與算法分析概述_第3頁
數(shù)據(jù)挖掘與算法分析概述_第4頁
數(shù)據(jù)挖掘與算法分析概述_第5頁
已閱讀5頁,還剩225頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、數(shù)據(jù)挖掘與算法分析概述技術(shù)創(chuàng)新,變革未來智慧IT目 錄環(huán)境的安裝與使用基本術(shù)語與線性回歸數(shù)據(jù)挖掘經(jīng)典算法介紹Python安裝與使用推薦使用 Anaconda + PyCharm/distribution/pycharm/download/#section=windowsPython安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Pyth

2、on安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Pytho

3、n安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝Python安裝與使用 Anaconda 安裝基本術(shù)語信息數(shù)據(jù)知識價值記錄、存儲數(shù)據(jù)挖掘應(yīng)用 通常我們把信息轉(zhuǎn)化為價值,要經(jīng)歷信息、數(shù)據(jù)、知識、價值四個層面,數(shù)據(jù)挖掘就是中間的重要環(huán)節(jié),是從數(shù)據(jù)中發(fā)現(xiàn)知識的過程。 數(shù)據(jù)挖掘可以視為機(jī)器學(xué)習(xí)和數(shù)

4、據(jù)庫的交叉,它主要利用機(jī)器學(xué)習(xí)界提供的技術(shù)來分析海量數(shù)據(jù),利用數(shù)據(jù)庫界提供的技術(shù)來管理海量數(shù)據(jù)。基本術(shù)語數(shù)據(jù)挖掘的用途示例1(關(guān)聯(lián)問題): 經(jīng)常去超市的同學(xué)可能會發(fā)現(xiàn),我們事先在購物清單上列舉好的某些商品可能會被超市阿姨擺放在相鄰的區(qū)域。例如, 面包柜臺旁邊會擺上黃油、面條柜臺附近一定會有老干媽等等。這樣的物品擺放會讓我們的購物過程更加快捷、輕松。那么如何知道哪些物品該擺放在一塊?又或者用戶在購買某一個商品的情況下購買另一個商品的概率有多大?這就要利用關(guān)聯(lián)數(shù)據(jù)挖掘的相關(guān)算法來解決。示例2(分類問題): 在嘈雜的廣場上,身邊人來人往。仔細(xì)觀察他們的外貌、衣著、言行等我們會不自覺地斷論這個人是新疆

5、人、東北人或者是上海人。又例如,在剛剛結(jié)束的2015NBA總決賽中,各類權(quán)威機(jī)構(gòu)會大量分析騎士隊與勇士隊的歷史數(shù)據(jù)從而得出騎士隊或者勇士隊是否會奪冠的結(jié)論。基本術(shù)語數(shù)據(jù)挖掘的用途示例3(聚類問題): ”物以類聚,人以群分“,生活中到處都有聚類問題的影子。假設(shè)銀行擁有若干客戶的歷史消費記錄,現(xiàn)在由于業(yè)務(wù)擴(kuò)張需要新增幾款面對不同人群的理財產(chǎn)品,那么如何才能準(zhǔn)確的將不同的理財產(chǎn)品通過電話留言的方式推薦給不同的人群?這便是一個聚類問題,銀行一般會將所有的用戶進(jìn)行聚類,有相似特征的用戶屬于同一個類別,最后將不同理財產(chǎn)品推薦給相應(yīng)類別的客戶。示例4(回歸問題): 回歸問題或者稱作預(yù)測問題同樣也是一個生活中

6、相當(dāng)接地氣的應(yīng)用。大家知道,證券公司會利用歷史數(shù)據(jù)對未來一段時間或者某一天的股票價格走勢進(jìn)行預(yù)測。同樣,房地產(chǎn)商也會根據(jù)地域情況對不同面積樓層的房產(chǎn)進(jìn)行定價預(yù)測?;拘g(shù)語參考:機(jī)器學(xué)習(xí),周志華,清華大學(xué)出版社編號色澤根蒂敲聲1青綠蜷縮濁響2烏黑蜷縮濁響3青綠硬挺清脆4烏黑稍蜷沉悶數(shù)據(jù)記錄的集合稱為一個“數(shù)據(jù)集”。每條記錄是關(guān)于一個事件或?qū)ο蟮拿枋?,稱為一個“示例”或“樣本” 。反映事件或?qū)ο笤谀撤矫娴谋憩F(xiàn)或性質(zhì)的事項,稱為“屬性”或“特征” 。屬性組成的空間,稱為“屬性空間”或“樣本空間”或“輸入空間” 。屬性上的取值,稱為“屬性值” 。關(guān)于西瓜的數(shù)據(jù)信息基本術(shù)語參考:機(jī)器學(xué)習(xí),周志華,清華大

7、學(xué)出版社編號色澤根蒂敲聲1青綠蜷縮濁響2烏黑蜷縮濁響3青綠硬挺清脆4烏黑稍蜷沉悶從數(shù)據(jù)中學(xué)得模型的過程稱為“學(xué)習(xí)”或“訓(xùn)練”。訓(xùn)練過程中使用的數(shù)據(jù)稱為“訓(xùn)練數(shù)據(jù)”,其中每一個樣本稱為一個“訓(xùn)練樣本”,訓(xùn)練樣本組成的集合稱為“訓(xùn)練集” 。關(guān)于西瓜的數(shù)據(jù)信息基本術(shù)語參考:機(jī)器學(xué)習(xí),周志華,清華大學(xué)出版社編號色澤根蒂敲聲好瓜1青綠蜷縮濁響是2烏黑蜷縮濁響是3青綠硬挺清脆否4烏黑稍蜷沉悶否擁有標(biāo)記信息的示例稱為“樣例”,所有標(biāo)記的集合稱為“輸出空間”。若我們預(yù)測的是離散值,例如“好瓜”“壞瓜”,此類學(xué)習(xí)任務(wù)稱為“分類”稱為“分類” 。關(guān)于西瓜的數(shù)據(jù)信息若我們預(yù)測的是連續(xù)值,例如西瓜成熟度0.95、0.

8、37,此類學(xué)習(xí)任務(wù)稱為 “回歸” ?;拘g(shù)語參考:機(jī)器學(xué)習(xí),周志華,清華大學(xué)出版社編號色澤根蒂敲聲好瓜1青綠蜷縮濁響是2烏黑蜷縮濁響是3青綠硬挺清脆否4烏黑稍蜷沉悶否101青綠硬挺清脆否102青綠硬挺濁響否關(guān)于西瓜的數(shù)據(jù)信息學(xué)得模型后,使用其進(jìn)行預(yù)測的過程稱為“測試”,被預(yù)測的樣本稱為“測試樣本”,測試樣本的集合稱為“測試集”。訓(xùn)練集:測試集:學(xué)得模型適用于新樣本的能力,稱為“泛化”能力。驗證集:驗證集:是模型訓(xùn)練過程中單獨留出的樣本集,它可以用于調(diào)整模型的超參數(shù)和用于對模型的能力進(jìn)行初步評估?;拘g(shù)語-公式化表述訓(xùn)練數(shù)據(jù)學(xué)習(xí)算法模型(映射函數(shù))測試數(shù)據(jù)預(yù)測結(jié)果訓(xùn)練數(shù)據(jù):編號色澤根蒂敲聲好瓜1

9、青綠蜷縮濁響是2烏黑蜷縮濁響是3青綠硬挺清脆否4烏黑稍蜷沉悶否101青綠硬挺清脆否102青綠硬挺濁響否學(xué)習(xí)目標(biāo):基本術(shù)語-一個形象的比喻訓(xùn)練集驗證集測試集數(shù)據(jù)集數(shù)據(jù)課后題模擬考高考課后題+模擬考+高考標(biāo)簽答案答案答案答案 訓(xùn)練集:學(xué)生的課本,也就是我們的課后題,學(xué)生根據(jù)課本里的內(nèi)容來掌握知識。 驗證集:模擬考,通過作業(yè)可以知道對模擬考的掌握情況怎么樣,發(fā)現(xiàn)自己薄 弱部分。 測試集:高考,考的題是平常都沒有見過,考察學(xué)生舉一反三的能力。 數(shù)據(jù)集:課后題,模擬考,高考的總和。 樣 本:所做的每一道題可以看做為一個樣本。 標(biāo) 簽:題的答案可以看做標(biāo)簽。基本術(shù)語-一個形象的比喻為什么要測試集?訓(xùn)練集直

10、接參與了模型調(diào)參的過程,顯然不能用來反映模型真實的能力(防止課本死記硬背的學(xué)生擁有最好的成績,即防止過擬合)。驗證集參與了人工調(diào)參(超參數(shù))的過程,也不能用來最終評判一個模型(刷題庫的學(xué)生不能算是學(xué)習(xí)好的學(xué)生)。所以要通過最終的考試(測試集)來考察一個學(xué)(模)生(型)真正的能力(進(jìn)行高考作為最后測試)。為什么要驗證集?開發(fā)模型時總是需要調(diào)節(jié)模型配置,比如選擇層數(shù)或每層大小(這叫作模型的超參數(shù))。這個調(diào)節(jié)過程需要使用模型在驗證數(shù)據(jù)上的性能作為反饋信號?;拘g(shù)語 監(jiān)督學(xué)習(xí):根據(jù)已有的數(shù)據(jù)集,知道輸入和輸出結(jié)果之間的關(guān)系。根據(jù)這種已知的關(guān)系,訓(xùn)練得到一個最優(yōu)的模型。也就是說,在監(jiān)督學(xué)習(xí)中訓(xùn)練數(shù)據(jù)既有

11、特征又有標(biāo)簽,通過訓(xùn)練,讓機(jī)器可以自己找到特征和標(biāo)簽之間的聯(lián)系,在面對只有特征沒有標(biāo)簽的數(shù)據(jù)時,可以判斷出標(biāo)簽。 無監(jiān)督學(xué)習(xí):我們不知道數(shù)據(jù)集中數(shù)據(jù)、特征之間的關(guān)系(即不知道標(biāo)簽),而是要根據(jù)聚類或一定的模型得到數(shù)據(jù)之間的關(guān)系。 半監(jiān)督學(xué)習(xí):一部分?jǐn)?shù)據(jù)有標(biāo)記,一部分?jǐn)?shù)據(jù)沒有標(biāo)記。基本術(shù)語-機(jī)器學(xué)習(xí)的任務(wù)類型監(jiān)督學(xué)習(xí)聚類,就是對大量的未知標(biāo)注的數(shù)據(jù)集,按數(shù)據(jù)的內(nèi)在相似性將數(shù)據(jù)集劃分為多個類別,使類別內(nèi)的數(shù)據(jù)相似度較大而類別間的數(shù)據(jù)相似度較小。無監(jiān)督學(xué)習(xí):分類回歸分類就是向事物分配標(biāo)簽,聚類就是將相似的事物放在一起定量輸出稱為回歸,或者說是連續(xù)變量預(yù)測;定性輸出稱為分類,或者說是離散變量預(yù)測。舉個

12、例子:預(yù)測明天的氣溫是多少度,這是一個回歸任務(wù);預(yù)測明天是陰、晴還是雨,就是一個分類任務(wù)。最簡單的監(jiān)督學(xué)習(xí)-線性回歸 回歸在數(shù)學(xué)上來說是給定一個點集,能夠用一條曲線去擬合之,如果這個曲線是一條直線,那就被稱為線性回歸,如果曲線是一條二次曲線,就被稱為二次回歸。Price ($) in 1000sSize in feet2 最簡單的監(jiān)督學(xué)習(xí)-線性回歸 回歸在數(shù)學(xué)上來說是給定一個點集,能夠用一條曲線去擬合之,如果這個曲線是一條直線,那就被稱為線性回歸,如果曲線是一條二次曲線,就被稱為二次回歸。Price ($) in 1000sSize in feet2 模型參數(shù)最簡單的監(jiān)督學(xué)習(xí)-線性回歸Size

13、 in feet2 (x)Price ($) in 1000s (y)210446014162321534315852178訓(xùn)練集模型表達(dá)式模型參數(shù)如何選擇合適的?最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)xy最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)xy最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)xy模型學(xué)習(xí)損失函數(shù)最小化最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法 梯度的本意是一個向量(矢量),表示某一函數(shù)在該點處的方向?qū)?shù)沿著該方向取得最大值,即函數(shù)在該點處沿著該方向(此梯度的方向)變化最快,變化率最大(為該梯度的模)梯度的定義梯度的方向是函數(shù)增長最快的方向,梯度的反方向是降低最快的方向最

14、簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法梯度下降法損失函數(shù):優(yōu)化目標(biāo):優(yōu)化步驟:隨機(jī)初始化改變減小的值,直至達(dá)到極小值點最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法梯度下降法10J(0,1)最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法梯度下降法重復(fù)下述公式直到收斂學(xué)習(xí)率初始值?最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法梯度下降法(學(xué)習(xí)率的影響)學(xué)習(xí)率控制著學(xué)習(xí)的步長學(xué)習(xí)率太小收斂緩慢學(xué)習(xí)率太大可能導(dǎo)致震蕩或收斂失敗最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法梯度下降法(初始參數(shù)值的影響)01J(0,1

15、)梯度下降法尋找的是局部最優(yōu)并不一定是全局最優(yōu)最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題重復(fù)下述公式直到收斂梯度下降法線性回歸模型最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題同時更新重復(fù)下述公式直到收斂最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題(for fixed , this is a function of x)(function of the parameters )最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法利用梯度下降法

16、解決線性回歸問題(for fixed , this is a function of x)(function of the parameters )最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題(for fixed , this is a function of x)(function of the parameters )最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題(for fixed , this is a function of x)(function of the parameters )最簡

17、單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題(for fixed , this is a function of x)(function of the parameters )最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題(for fixed , this is a function of x)(function of the parameters )最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題(for fixed , this is a function

18、of x)(function of the parameters )最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題(for fixed , this is a function of x)(function of the parameters )最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法利用梯度下降法解決線性回歸問題(for fixed , this is a function of x)(function of the parameters )最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法利用梯度下降法解決線性

19、回歸問題(for fixed , this is a function of x)(function of the parameters )最簡單的監(jiān)督學(xué)習(xí)-線性回歸 損失函數(shù)最小值計算方法-梯度下降法隨機(jī)批梯度下降法(處理大數(shù)據(jù)問題)重復(fù)下述公式直到收斂每次隨機(jī)取一部分樣本進(jìn)行計算最簡單的監(jiān)督學(xué)習(xí)-線性回歸 多元變量線性回歸。誤差越小越好?欠擬合正常過擬合過小的誤差會導(dǎo)致模型出現(xiàn)過擬合。一元線性回歸-實戰(zhàn) 數(shù)據(jù)介紹某款產(chǎn)品在某個城市的銷售利潤與城市人口的數(shù)據(jù)如下:一元線性回歸-實戰(zhàn) 代碼結(jié)構(gòu)def loadDataSet(filename): 加載文件,將feature存在X中,y存在Y中

20、X = Y = with open(filename, rb) as f: for idx, line in enumerate(f): line = line.decode(utf-8).strip() if not line: continue eles = line.split() if idx = 0: numFeature = len(eles) eles = list(map(float, eles) # 將數(shù)據(jù)轉(zhuǎn)換成float型 X.append(eles:-1) # 除最后一列都是feature,append(list) Y.append(eles-1) # 最后一列是實際值,

21、同上 return np.array(X), np.array(Y) # 將X,Y列表轉(zhuǎn)化成矩陣加載數(shù)據(jù)一元線性回歸-實戰(zhàn) 代碼結(jié)構(gòu)定義模型函數(shù)def h(theta, X): 定義模型函數(shù) return np.dot(X, theta) # 此時的X為處理后的X一元線性回歸-實戰(zhàn) 代碼結(jié)構(gòu)定義損失函數(shù)def J(theta, X, Y): 定義代價函數(shù) m = len(X) return np.sum(np.dot(h(theta,X)-Y).T, (h(theta,X)-Y)/(2 * m)而即一元線性回歸-實戰(zhàn) 代碼結(jié)構(gòu)定義定義梯度下降公式def bgd(alpha, maxloop,

22、epsilon, X, Y): 定義梯度下降公式,其中alpha為學(xué)習(xí)率控制步長,maxloop為最大迭代次數(shù),epsilon為閾值控制迭代(判斷收斂) m, n = X.shape # m為樣本數(shù),n為特征數(shù),在這里為2 theta = np.zeros(2, 1) # 初始化參數(shù)為零 count = 0 # 記錄迭代次數(shù) converged = False # 是否收斂標(biāo)志 cost = np.inf # 初始化代價為無窮大 costs = # 記錄每一次迭代的代價值 thetas = 0: theta0, 0, 1: theta1, 0 # 記錄每一輪theta的更新 while cou

23、nt = maxloop: if converged: break # 同步更新theta count = count + 1 theta = theta - alpha / (1.0 * m) * np.dot(X.T, (h(theta, X) - Y) # 一起計算 thetas0.append(theta0) thetas1.append(theta1) cost = J(theta, X, Y) # 更新當(dāng)前cost costs.append(cost) # 如果收斂,則不再迭代 if cost epsilon: converged = True return theta, cost

24、s, thetas一元線性回歸-實戰(zhàn) 代碼結(jié)構(gòu)X, Y = loadDataSet(./data/ex1.txt)m, n = X.shapeX = np.concatenate(np.ones(m,1), X), axis=1) # 將第一列為1的矩陣,與原X相連alpha = 0.02 # 學(xué)習(xí)率maxloop = 1500 # 最大迭代次數(shù)epsilon = 0.01 # 收斂判斷條件result = bgd(alpha, maxloop, epsilon, X, Y)theta, costs, thetas = result # 最優(yōu)參數(shù)保存在theta中,costs保存每次迭代的代價

25、值,thetas保存每次迭代更新的theta值# 到此,參數(shù)學(xué)習(xí)出來了,模型也就定下來了,若要預(yù)測新的實例,進(jìn)行以下即可# Y_predict = h(theta, X_predict)# 以下為訓(xùn)練集的預(yù)測值XCopy = X.copy()XCopy.sort(0) # axis=0 表示列內(nèi)排序yHat = h(theta, XCopy)# 繪制回歸直線plt.xlabel(u城市人口(萬)plt.ylabel(u利潤(萬元)plt.plot(XCopy:,1, yHat,color=r)plt.scatter(X:,1.flatten(), Y.T.flatten()plt.show()

26、一元線性回歸-實戰(zhàn) 代碼結(jié)構(gòu)利用sklearn機(jī)器學(xué)習(xí)庫classsklearn.linear_model.LinearRegression(fit_intercept=True,normalize=False,copy_X=True,n_jobs=None) fit_intercept : 默認(rèn)為True,是否計算該模型的截距。如果使用中心化的數(shù)據(jù),可以考慮設(shè)置為False,不考慮截距。注意這里是考慮,一般還是要考慮截距normalize: 默認(rèn)為false. 當(dāng)fit_intercept設(shè)置為false的時候,這個參數(shù)會被自動忽略。如果為True,回歸器會標(biāo)準(zhǔn)化輸入?yún)?shù):減去平均值,并且除

27、以相應(yīng)的二范數(shù)。copy_X : 默認(rèn)為True, 否則X會被改寫n_jobs: int 默認(rèn)為1. 當(dāng)-1時默認(rèn)使用全部CPUs一元線性回歸-實戰(zhàn) 代碼結(jié)構(gòu)利用sklearn機(jī)器學(xué)習(xí)庫可用的methods: fit(X,y,sample_weight=None) X: array, 稀疏矩陣 n_samples,n_features y: array n_samples, n_targets sample_weight: 權(quán)重 array n_samples 根據(jù)數(shù)據(jù)學(xué)習(xí)參數(shù)get_params(self, deep=True)返回初始化設(shè)置的參數(shù)一元線性回歸-實戰(zhàn) 代碼結(jié)構(gòu)利用sklear

28、n機(jī)器學(xué)習(xí)庫可用的methods: predict(self, X)score(self, X, y, sample_weight=None)source預(yù)測數(shù)據(jù)評估預(yù)測分?jǐn)?shù)1 - u/vu= (y_true - y_pred) * 2).sum() v= (y_true - y_true.mean() * 2).sum()一元線性回歸-實戰(zhàn) 代碼結(jié)構(gòu)利用sklearn機(jī)器學(xué)習(xí)庫屬性: coef_ : array, shape (n_features, ) or (n_targets, n_features)intercept_ : array coef_ intercept_ 一元線性回歸-

29、實戰(zhàn) 代碼結(jié)構(gòu)利用sklearn機(jī)器學(xué)習(xí)庫X, Y = loadDataSet(./data/ex1.txt)print(X.shape)print(Y.shape)reg = LinearRegression().fit(X, Y)print(reg.get_params()print(reg.coef_)print(ercept_)print(reg.predict(np.array(500)(97, 1)(97, 1)copy_X: True, fit_intercept: True, n_jobs: 1, normalize: False1.19303364-3.89578088592

30、.62104122多元線性回歸-實戰(zhàn) 數(shù)據(jù)介紹利用sklearn機(jī)器學(xué)習(xí)庫根據(jù)面積和房間數(shù)預(yù)測房價100平米、兩個房間的房價估價是多少?數(shù)據(jù)挖掘經(jīng)典算法邏輯回歸1PCA降維2 K-近鄰算法3樸素貝葉斯分類4K均值聚類56決策樹7EM算法8支持向量機(jī)K-均值聚類-簡介 從無標(biāo)簽數(shù)據(jù)中組織數(shù)據(jù)的結(jié)構(gòu),從而對樣本進(jìn)行分組,是無監(jiān)督學(xué)習(xí)的一種常用聚類方法。聚類示例將無標(biāo)簽的數(shù)據(jù)集分成兩組輸入數(shù)據(jù)不含任何標(biāo)簽將相似的樣本劃分為一個組K-均值聚類-簡介原始數(shù)據(jù)集劃分為2個簇劃分為4個簇K-均值聚類-原理 K-means聚類算法流程可以分為四個步驟,需要注意幾點:距離度量:歐氏距離、余弦相似度等質(zhì)心計算:樣

31、本均值第1步. 從數(shù)據(jù)中隨機(jī)選擇K個對象作為初始聚類中心;第2步.計算每個聚類對象到聚類中心的距離來劃分K個簇;第3步.計算每個簇的質(zhì)心作為新的聚類中心;第4步.重復(fù)步驟2、3,直到達(dá)到最大迭代次數(shù),最后所有樣本被分為K個簇。K-均值聚類-原理 K如何選擇?K的選擇一般是按照實際需求進(jìn)行決定,或在實現(xiàn)算法時直接給定K值 。 距離度量給定樣本 與,常用的距離度量有以下三種:閔可夫斯基距離(Minkowski distance):歐氏距離(Euclidean distance):曼哈頓距離(Manhattan distance):即當(dāng) p=2 時的閔可夫斯基距離即當(dāng) p=1 時的閔可夫斯基距離 更

32、新“簇中心”對于劃分好的各個簇,計算各個簇中的樣本點均值,將其均值作為新的簇中心。K-均值聚類-原理K-均值聚類-原理 K-均值算法缺點 K-均值算法由于初始“簇中心”點是隨機(jī)選取的,因此最終求得的簇的劃分與隨機(jī)選取的“簇中心”有關(guān),也就是說,可能會造成多種 k 個簇的劃分情況。這是因為K-均值算法收斂到了局部最小值,而非全局最小值。K-均值聚類-實戰(zhàn) 數(shù)據(jù)介紹按照每一個實例的相似度聚類成多個簇K-均值聚類-實戰(zhàn) 代碼結(jié)構(gòu)def loadDataSet(filename): 讀取數(shù)據(jù)集 Args: filename: 文件名 Returns: dataMat: 數(shù)據(jù)樣本矩陣 dataMat =

33、 with open(filename, rb) as f: for line in f: # 讀取的字節(jié)流需要先解碼成utf-8再處理 eles = list(map(float, line.decode(utf-8).strip().split(t) dataMat.append(eles) return dataMatK-均值聚類-實戰(zhàn) 代碼結(jié)構(gòu)def distEclud(vecA, vecB): 計算兩向量的歐氏距離 Args: vecA: 向量A vecB: 向量B Returns: 歐式距離 return np.sqrt(np.sum(np.power(vecA-vecB,2)K-

34、均值聚類-實戰(zhàn) 代碼結(jié)構(gòu)def randCent(dataSet, k): 隨機(jī)生成k個聚類中心 Args: dataSet: 數(shù)據(jù)集 k: 簇數(shù)目 Returns: centroids: 聚類中心矩陣 m, _ = dataSet.shape # 隨機(jī)從數(shù)據(jù)集中選幾個作為初始聚類中心 centroids = dataSet.take(np.random.choice(80,k), axis=0) return centroidsK-均值聚類-實戰(zhàn) 代碼結(jié)構(gòu)def kMeans(dataSet, k, maxIter=20): K-Means Args: dataSet: 數(shù)據(jù)集 k: 聚類數(shù)

35、 Returns: centroids: 聚類中心 clusterAssment: 點分配結(jié)果 # 隨機(jī)初始化聚類中心 centroids = randCent(dataSet, k) init_centroids = centroids.copy() m, n = dataSet.shape # 點分配結(jié)果:第一列指明樣本所在的簇,第二列指明 該樣本到聚類中心的距離 clusterAssment = np.mat(np.zeros(m, 2) # 標(biāo)識聚類中心是否仍在變化 clusterChanged = True # 直至聚類中心不再變化 iterCount = 0 while clust

36、erChanged and iterCount maxIter: iterCount += 1 clusterChanged = False # 分配樣本到簇 for i in range(m): # 計算第i個樣本到各個聚類中心的距離 minIndex = 0 minDist = np.inf for j in range(k): dist = distEclud(dataSeti, :, centroidsj, :) if dist array ptsInCluster = dataSetnp.nonzero(clusterAssment:, 0.A = cent)0 if ptsInCl

37、uster.shape0 0: # 計算均值并移動 centroidscent, : = np.mean(ptsInCluster, axis=0) return centroids, clusterAssment, init_centroidsK-均值聚類-實戰(zhàn) 代碼結(jié)構(gòu)dataMat = np.mat(loadDataSet(data/testSet.txt)m, n = np.shape(dataMat)set_k = 4centroids, clusterAssment, init_centroids = kMeans(dataMat, set_k)clusterCount = np.

38、shape(centroids)0# 我們這里只設(shè)定了最多四個簇的樣式,所以前面如果set_k設(shè)置超過了4,后面就會出現(xiàn)index errorpatterns = o, D, , scolors = b, g, y, blackfig = plt.figure()title = kmeans with k=.format(set_k)ax = fig.add_subplot(111, title=title)for k in range(clusterCount): # 繪制聚類中心 ax.scatter(centroidsk,0, centroidsk,1, color=r, marker=

39、+, linewidth=20) # 繪制初始聚類中心 ax.scatter(init_centroidsk,0, init_centroidsk,1, color=purple, marker=*, linewidth=10 ) for i in range(m): # 繪制屬于該聚類中心的樣本 ptsInCluster = dataMatnp.nonzero(clusterAssment:,0.A=k)0 ax.scatter(ptsInCluster:,0.flatten().A0, ptsInCluster:,1.flatten().A0, color=colorsk, marker=

40、patternsk)plt.show()K-均值聚類-實戰(zhàn) 代碼結(jié)構(gòu)利用sklearn機(jī)器學(xué)習(xí)庫classsklearn.cluster.KMeans(n_clusters=8,init=k-means+,n_init=10,max_iter=300,tol=0.0001,precompute_distances=auto,verbose=0,random_state=None,copy_x=True,n_jobs=None,algorithm=auto) KMeans類的主要參數(shù)有: 1) n_clusters: 即我們的k值,一般需要多試一些值以獲得較好的聚類效果。 2)max_iter:

41、 最大的迭代次數(shù)。 3)n_init:用不同的初始化質(zhì)心運行算法的次數(shù)。由于K-Means是結(jié)果受初始值影響的 局部最優(yōu)的迭代算法,因此需要多跑幾次以選擇一個較好的聚類效果,默認(rèn)是10,一般不需要改。如果你的k值較大,則可以適當(dāng)增大這個值。 4)init: 即初始值選擇的方式,可以為完全隨機(jī)選擇random,優(yōu)化過的k-means+或者自己指定初始化的k個質(zhì)心。一般建議使用默認(rèn)的k-means+。 5)algorithm:有“auto”, “full” or “elkan”三種選擇?!癴ull”就是我們傳統(tǒng)的K-Means算法, “elkan”是elkan K-Means算法。默認(rèn)的auto則

42、會根據(jù)數(shù)據(jù)值是否是稀疏的,來決定如何選擇full和“elkan”。一般數(shù)據(jù)是稠密的,那么就是 “elkan”,否則就是full”。一般來說建議直接用默認(rèn)的autoK-均值聚類-實戰(zhàn) 代碼結(jié)構(gòu)利用sklearn機(jī)器學(xué)習(xí)庫fit(self, X)fit_predict(self, X) KMeans類的主要方法:對數(shù)據(jù)X聚類對數(shù)據(jù)X聚類且計算每一個樣本點對應(yīng)的類別索引predict(self, X)預(yù)測新輸入的樣本對應(yīng)的最近的聚類中心X:ndarray數(shù)據(jù)類型K-均值聚類-實戰(zhàn) 代碼結(jié)構(gòu)利用sklearn機(jī)器學(xué)習(xí)庫import numpy as npimport matplotlib.pyplot

43、 as pltfrom sklearn.cluster import KMeansfrom sklearn.datasets import make_blobsplt.figure(figsize=(12, 12)n_samples = 1500random_state = 200X, y = make_blobs(n_samples=n_samples, random_state=random_state)# Incorrect number of clustersy_pred = KMeans(n_clusters=3, random_state=random_state).fit_pre

44、dict(X)plt.plot()plt.scatter(X:, 0, X:, 1, c=y_pred)plt.title(kmeans)plt.show()K-均值聚類-實戰(zhàn) 代碼結(jié)構(gòu)利用sklearn機(jī)器學(xué)習(xí)庫K-Means+ 由于 K-means 算法的分類結(jié)果會受到初始點的選取而有所區(qū)別,因此有提出這種算法的改進(jìn): K-means+ ,其實這個算法也只是對初始點的選擇有改進(jìn)而已,其他步驟都一樣。初始質(zhì)心選取的基本思路就是,初始的聚類中心之間的相互距離要盡可能的遠(yuǎn)。K-Means+ 數(shù)據(jù)集中共有8個樣本,分布以及對應(yīng)序號如右圖所示: 聚類中心選取示例 假設(shè)經(jīng)過步驟一后6號點被選擇為第一個

45、初始聚類中心,那在進(jìn)行步驟二時每個樣本的D(x)和被選擇為第二個聚類中心的概率如下表所示:K-Means+ 聚類中心選取示例 其中的P(x)就是每個樣本被選為下一個聚類中心的概率。最后一行的Sum是概率P(x)的累加和,用于輪盤法選擇出第二個聚類中心。方法是隨機(jī)產(chǎn)生出一個01之間的隨機(jī)數(shù),判斷它屬于哪個區(qū)間,那么該區(qū)間對應(yīng)的序號就是被選擇出來的第二個聚類中心了。 例如1號點的區(qū)間為0,0.2),2號點的區(qū)間為0.2, 0.525)。 從上表可以直觀的看到第二個初始聚類中心是1號,2號,3號,4號中的一個的概率為0.9。而這4個點正好是離第一個初始聚類中心6號點較遠(yuǎn)的四個點。 這也驗證了K-me

46、ans的改進(jìn)思想:即離當(dāng)前已有聚類中心較遠(yuǎn)的點有更大的概率被選為下一個聚類中心。數(shù)據(jù)挖掘經(jīng)典算法邏輯回歸1PCA降維2 K-近鄰算法3樸素貝葉斯分類4K均值聚類56決策樹7EM算法8支持向量機(jī)PCA-簡介 數(shù)據(jù)降維 在實際生產(chǎn)生活中,我們所獲得的數(shù)據(jù)集在特征上往往具有很高的維度,對高維度的數(shù)據(jù)進(jìn)行處理時消耗的時間很大,并且過多的特征變量也會妨礙查找規(guī)律的建立。如何在最大程度上保留數(shù)據(jù)集的信息量的前提下進(jìn)行數(shù)據(jù)維度的降低,是我們需要解決的問題。 對數(shù)據(jù)進(jìn)行降維有以下優(yōu)點:(1)使得數(shù)據(jù)集更易使用 (2)降低很多算法的計算開銷 (3)去除噪聲 (4)使得結(jié)果易懂PCA-簡介 數(shù)據(jù)降維如何降維可以保

47、留盡可能多的信息?PCA-簡介數(shù)據(jù)降維 數(shù)據(jù)降維的優(yōu)化目標(biāo)就是:(1)對于 2 維降到 1 維:找到一個投影方向,使得投影誤差和最小。(2)對于 n 維降到 k 維:找到 k 個向量定義的 k 維投影平面,使得投影 誤差和最小。 那么投影誤差又是什么呢? 投影誤差即為,每一個樣本點到投影向量或者投影平面的距離。 投影誤差和即為所有樣本點到投影向量或投影平面的距離的和。PCA-簡介數(shù)據(jù)降維為什么將“投影誤差和最小”作為優(yōu)化目標(biāo)?投影誤差和 假設(shè)對于原樣本中,位于第一象限的三個樣本點屬于類別“A”,位于第三象限的兩個樣本點屬于類別“B”。經(jīng)過投影后,僅左邊可保留類別信息。PCA-簡介 數(shù)據(jù)降維如何

48、尋找投影誤差最小的方向? 尋找到方差最大的方向即可。方差最大與投影誤差最小這兩個優(yōu)化目標(biāo)其實本質(zhì)上是一樣的。希望投影后的投影值盡可能分散PCA-簡介主成分分析(Principal Component Analysis, PCA)是最流行的降維算法,通過把數(shù)據(jù)從高維映射到低維來降低特征維度,同時保留盡可能多的信息。廣泛應(yīng)用于降維、有損數(shù)據(jù)壓縮、特征提取、數(shù)據(jù)可視化等領(lǐng)域。是一種無監(jiān)督的學(xué)習(xí)方式。 數(shù)據(jù)降維PCA-簡介進(jìn)行主成分分析有兩個目的: 1. 在保留盡可能多的信息的前提下,降低維度。 2. 各樣本在新的維度上,沒有相關(guān)關(guān)系(線性)。 也就是不能根據(jù)一個維度的值就能大概推測(線性)另一個維度

49、的值。主成分分析第一條原則是新的變量要盡量分散,因為這樣代表差異性大,蘊含了更多的信息。第二條原則是新的變量之間線性無關(guān),這樣就盡量消除了冗余信息。PCA-簡介 PCA算法思路 PCA的算法思路主要是:數(shù)據(jù)從原來的坐標(biāo)系轉(zhuǎn)換到新的坐標(biāo)系,由數(shù)據(jù)本身決定。轉(zhuǎn)換坐標(biāo)系時,以方差最大的方向作為坐標(biāo)軸方向,因為數(shù)據(jù)的最大方差給出了數(shù)據(jù)的最重要的信息。第一個新坐標(biāo)軸選擇的是原始數(shù)據(jù)中方差最大的方向,第二個新坐標(biāo)軸選擇的是與第一個新坐標(biāo)軸正交且方差次大的方向。重復(fù)該過程,重復(fù)次數(shù)為原始數(shù)據(jù)的特征維數(shù)。PCA-深入分析 數(shù)學(xué)基礎(chǔ)PCA-簡介 PCA算法思路 有了前述兩條原則以后,那應(yīng)該具體怎樣一步步實現(xiàn)?對

50、于分散程度的度量,我們知道,通常用方差表示。而對于相關(guān)性的度量,協(xié)方差是一個常見的度量方式。 所以,上述目標(biāo)轉(zhuǎn)換為: 每個新變量的方差盡量大,新變量之間的協(xié)方差為0。PCA-簡介 PCA算法思路舉個例子,有兩個變量的矩陣A為:目標(biāo)轉(zhuǎn)換為: 協(xié)方差矩陣的對角線上元素盡量大,其它元素為0,也就是需要進(jìn)行對角化。PCA-簡介 PCA算法思路協(xié)方差矩陣是實對稱矩陣,這里需要利用實對稱矩陣的一個性質(zhì):nxn的實對稱矩陣一定可以找到n個單位正交的特征向量,一定可以對角化,特征向量是進(jìn)行對角化的轉(zhuǎn)移矩陣,特征值組成對角矩陣。因此,問題轉(zhuǎn)化為特征值分解,然后取較大的特征值。 對協(xié)方差矩陣進(jìn)行特征值分解,特征值

51、從大到小排序組成新的協(xié)方差矩陣,對應(yīng)的特征向量(單位正交基)就組成了轉(zhuǎn)移矩陣Q。所以,轉(zhuǎn)換后新的變量C=QA。PCA-簡介 PCA算法思路完成變換以后,降維就很容易。新協(xié)方差矩陣對角線元素是方差,是包含信息量的度量,而對角線元素從大到小排列,所以只需取前k個變量(列)即可。k具體是多少,可以指定,也可以先計算所有方差的和S,如果前n個方差的和大于了95%*S,那么k就取n。PCA-深入分析 算法過程 缺點分析數(shù)據(jù)維度降低并不代表特征的減少,因為降維仍舊保留了較大的信息量,對結(jié)果過擬合問題并沒有幫助。不能將降維算法當(dāng)做解決過擬合問題方法。如果原始數(shù)據(jù)特征維度并不是很大,也并不需要進(jìn)行降維。PCA

52、-實例 要求將二維數(shù)據(jù)降為1維 解決步驟因為這個矩陣的每行已經(jīng)是零均值,這里我們直接求協(xié)方差矩陣:求解后特征值和特征向量為:PCA-實例 最后我們用P的第一行乘以數(shù)據(jù)矩陣,就得到了降維后的表示:降維投影結(jié)果如右圖:標(biāo)準(zhǔn)化后的特征向量為:因此我們的矩陣P是:PCA-實戰(zhàn)sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)n_components: int, float, None 或 string,PCA算法中所要保留的主成分個數(shù),也即保留下來的特征個數(shù),如果 n_components = 1,將把原始數(shù)據(jù)降到

53、一維;如果賦值為string,如n_components=mle,將自動選取特征個數(shù),使得滿足所要求的方差百分比;如果沒有賦值,默認(rèn)為None,特征個數(shù)不會改變(特征數(shù)據(jù)本身會改變)。copy:True 或False,默認(rèn)為True,即是否需要將原始訓(xùn)練數(shù)據(jù)復(fù)制。whiten:True 或False,默認(rèn)為False,即是否白化,使得每個特征具有相同的方差。PCA-實戰(zhàn) PCA對象的屬性explained_variance_ratio_:返回所保留各個特征的方差百分比,如果n_components沒有賦值,則所有特征都會返回一個數(shù)值且解釋方差之和等于1。n_components_:返回所保留的

54、特征個數(shù)。PCA-實戰(zhàn) PCA常用方法fit(X): 用數(shù)據(jù)X來訓(xùn)練PCA模型。fit_transform(X):用X來訓(xùn)練PCA模型,同時返回降維后的數(shù)據(jù)。transform(X):將數(shù)據(jù)X轉(zhuǎn)換成降維后的數(shù)據(jù),當(dāng)模型訓(xùn)練好后,對于新輸入的數(shù)據(jù),也可以用transform方法來降維。PCA-實戰(zhàn)import numpy as npimport matplotlib.pyplot as pltfrom sklearn.decomposition import PCAX = np.array(-1, -1, -2, -1, -3, -2, 1, 1, 2, 1, 3, 2)#pca = PCA(n

55、_components=2)#newX = pca.fit_transform(X)print(X)#print(newX)#print(pca.explained_variance_ratio_)pca = PCA(n_components=1)newX = pca.fit_transform(X)print(newX)#print(pca.explained_variance_ratio_)plt.scatter(X:, 0, X:, 1,marker=o)plt.scatter(newX:, 0, newX:, 0*0,color=r)plt.show()數(shù)據(jù)挖掘經(jīng)典算法邏輯回歸1PCA

56、降維2 K-近鄰算法3樸素貝葉斯分類4K均值聚類56決策樹7EM算法8支持向量機(jī)K-近鄰算法-簡介 給定一個訓(xùn)練數(shù)據(jù)集,對新的輸入實例,在訓(xùn)練數(shù)據(jù)集中找到與該實例最鄰近的 k 個實例,這 k 個實例的多數(shù)屬于某個類,就把該輸入實例分為這個類。 定義綠色點屬于什么類別?當(dāng) k=3 時,結(jié)果見第一個圓環(huán)內(nèi),此時紅色實例點為2個,藍(lán)色實例點為1個,因此將未知點判定為紅色類別。當(dāng) k=5 時,結(jié)果見第二個圓環(huán)內(nèi),此時紅色實例點為2個,藍(lán)色實例點為3個,因此將未知點判定為藍(lán)色類別。K-近鄰算法-分析 給定一個訓(xùn)練數(shù)據(jù)集,對新的輸入實例,在訓(xùn)練數(shù)據(jù)集中找到與該實例最鄰近的 k 個實例,這 k 個實例的多數(shù)

57、屬于某個類,就把該輸入實例分為這個類。 定義回顧K-近鄰算法的三大要素距離的度量:一般使用歐氏距離K值的選擇:結(jié)果對k值敏感,一般通過交叉驗證選擇分類決策規(guī)則:投票法K-近鄰算法-步驟輸入:輸出:輸入訓(xùn)練數(shù)據(jù)K-近鄰算法-優(yōu)缺點分析 訓(xùn)練樣本是否要一視同仁?在訓(xùn)練集中,有些樣本可能是更值得依賴的。可以給不同的樣本施加不同的權(quán)重,加強(qiáng)依賴樣本的權(quán)重,降低不可信賴樣本的影響。weight = 1 / (distance + const) 性能問題?KD樹Ball樹暴力匹配K-近鄰算法-優(yōu)缺點分析 優(yōu)點 缺點精度高對異常值不敏感無數(shù)據(jù)輸入假定計算復(fù)雜度高空間復(fù)雜度高樣本不平衡時分類錯誤幾率較高K-近

58、鄰算法-實戰(zhàn)class sklearn.neighbors.NearestNeighbors(n_neighbors=5, algorithm=auto, leaf_size=30, metric=minkowski, p=2, metric_params=None, n_jobs=None, *kwargs) K近鄰算法n_neighbors : int, optional (default = 5) 鄰居的個數(shù)algorithm : auto, ball_tree, kd_tree, brute, optional ball_tree BallTree kd_tree KDTree bru

59、te 暴力搜索. auto 根據(jù)數(shù)據(jù)自動選擇leaf_size:使用BallTree 或 KDTree時需指定,影響計算速度,具體問題具體對待metric: 距離度量類型,cityblock, cosine, euclidean, l1, l2, manhattanP:閔式距離時的范數(shù)metric_params:自定義距離度量函數(shù)K-近鄰算法-實戰(zhàn) K近鄰算法fit(X) 學(xué)習(xí)KNN模型kneighbors(X) 尋找最近的K個點常用成員方法K-近鄰算法-實戰(zhàn) K近鄰算法from sklearn.neighbors import NearestNeighborsimport numpy as

60、np # 快速操作結(jié)構(gòu)數(shù)組的工具X = np.array(-1, -1, -2, -1, -3, -2, 1, 1, 2, 1, 3, 2) # 樣本數(shù)據(jù)test_x = np.array(-3.2, -2.1, -2.6, -1.3, 1.4, 1.0, 3.1, 2.6, 2.5, 1.0, -1.2, -1.3) # 設(shè)置測試數(shù)據(jù)# test_x=X # 測試數(shù)據(jù)等于樣本數(shù)據(jù)。這樣就相當(dāng)于在樣本數(shù)據(jù)內(nèi)部查找每個樣本的鄰節(jié)點了。nbrs = NearestNeighbors(n_neighbors=2, algorithm=ball_tree).fit(X) # 為X生成knn模型dist

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論