(10)-第8章 sklearn機器學(xué)習(xí)實戰(zhàn)_第1頁
(10)-第8章 sklearn機器學(xué)習(xí)實戰(zhàn)_第2頁
(10)-第8章 sklearn機器學(xué)習(xí)實戰(zhàn)_第3頁
(10)-第8章 sklearn機器學(xué)習(xí)實戰(zhàn)_第4頁
(10)-第8章 sklearn機器學(xué)習(xí)實戰(zhàn)_第5頁
已閱讀5頁,還剩133頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第8章sklearn機器學(xué)習(xí)實戰(zhàn)1本章學(xué)習(xí)目標了解機器學(xué)習(xí)常用的基本概念了解如何根據(jù)實際問題類型選擇合適的機學(xué)習(xí)算法了解擴展庫sklearn常用模塊理解并熟練運用線性回歸算法理解并熟練運用邏輯回歸算法理解并熟練運用KNN算法理解并熟練運用KMeans算法理解分層聚類算法理解并熟練運用樸素貝葉斯算法理解并熟練運用決策樹與隨機森林算法理解并熟練運用DBSCAN算法理解并熟練運用協(xié)同過濾算法理解并熟練運用關(guān)聯(lián)規(guī)則分析算法理解并熟練運用支持向量機算法理解數(shù)據(jù)降維的作用和主成分分析的應(yīng)用理解并熟練運用交叉驗證評估模型泛化能力理解并熟練運用網(wǎng)格搜索確定最佳參數(shù)8.1機器學(xué)習(xí)基本概念機器學(xué)習(xí)(MachineLearning)根據(jù)已知數(shù)據(jù)來不斷學(xué)習(xí)和積累經(jīng)驗,然后總結(jié)出規(guī)律并嘗試預(yù)測未知數(shù)據(jù)的屬性,是一門綜合性非常強的多領(lǐng)域交叉學(xué)科,涉及線性代數(shù)、概率論、逼近論、凸分析、算法復(fù)雜度理論等多門學(xué)科。目前機器學(xué)習(xí)已經(jīng)有了十分廣泛的應(yīng)用,例如數(shù)據(jù)挖掘、計算機視覺、自然語言處理、生物特征識別、搜索引擎、醫(yī)學(xué)診斷、檢測信用卡欺詐、證券市場分析、DNA序列測序、語音和手寫識別、推薦系統(tǒng)、戰(zhàn)略游戲和機器人運用等。8.1機器學(xué)習(xí)基本概念在有監(jiān)督學(xué)習(xí)中,所有數(shù)據(jù)帶有額外的屬性(例如每個樣本所屬的類別),必須同時包含輸入和預(yù)期輸出(也就是特征和目標),通過大量已知的數(shù)據(jù)不斷訓(xùn)練和減少錯誤來提高認知能力,最后根據(jù)積累的經(jīng)驗去預(yù)測未知數(shù)據(jù)的屬性。分類和回歸屬于經(jīng)典的有監(jiān)督學(xué)習(xí)算法。在分類算法中,樣本屬于兩個或多個離散的類別之一,我們根據(jù)已貼標簽的樣本來學(xué)習(xí)如何預(yù)測未貼標簽樣本所屬的類別。如果預(yù)期的輸出是一個或多個連續(xù)變量,則分類問題變?yōu)榛貧w問題。8.1機器學(xué)習(xí)基本概念在無監(jiān)督學(xué)習(xí)算法中,訓(xùn)練數(shù)據(jù)包含一組輸入向量而沒有相應(yīng)的目標值。這類算法的目標可能是發(fā)現(xiàn)原始數(shù)據(jù)中相似樣本的組合(稱作聚類),或者確定數(shù)據(jù)的分布(稱作密度估計),或者把數(shù)據(jù)從高維空間投影到低維空間(稱作降維)以便進行可視化。一般地,不會把給定的整個數(shù)據(jù)集都用來訓(xùn)練模型,而是將其分成訓(xùn)練集和測試集兩部分,模型使用訓(xùn)練集進行訓(xùn)練或?qū)W習(xí),然后把測試集輸入訓(xùn)練好的模型并評估其表現(xiàn)。大多數(shù)模型都有若干參數(shù)可以設(shè)置,例如支持向量機模型的gamma參數(shù),這些參數(shù)可以手動設(shè)置,也可以使用網(wǎng)格搜索(gridsearch)和交叉驗證(crossvalidation)尋找最合適的值。8.1機器學(xué)習(xí)基本概念(1)一維數(shù)組一般用來表示向量,其shape屬性的長度為1。例如>>>importnumpyasnp>>>data=np.array([1,2,3,4,5])>>>dataarray([1,2,3,4,5])>>>data.shape(5,)>>>len(data.shape)#shape屬性長度為118.1機器學(xué)習(xí)基本概念(2)二維數(shù)組一般用來表示矩陣或樣本數(shù)據(jù),每行表示一個樣本,每列表示樣本的一個特征。二維數(shù)組shape屬性的長度為2。例如>>>importnumpyasnp>>>data=np.array([[1,2,3],[4,5,6]])>>>dataarray([[1,2,3],[4,5,6]])>>>data.shape#2行3列(2,3)>>>len(data.shape)#shape屬性長度為228.1機器學(xué)習(xí)基本概念(3)稀疏矩陣(sparsematrix)其中大多數(shù)元素為0的二維數(shù)值型矩陣,擴展庫scipy.sparse中實現(xiàn)了稀疏矩陣的高效表示、存儲和相關(guān)運算。(4)可調(diào)用對象(callable)在Python中,可調(diào)用對象主要包括函數(shù)(function)、lambda表達式、類(class)、類的方法(method)、實現(xiàn)了特殊方法__call__()的類的對象,這些對象作為內(nèi)置函數(shù)callable()的參數(shù)會使得該函數(shù)返回True。8.1機器學(xué)習(xí)基本概念(5)樣本(sample)通常用來表示單個特征向量,其中每個分量表示樣本的一個特征,這些特征組成的特征向量應(yīng)該能夠準確地描述一個樣本并能夠很好地區(qū)別于其他樣本。(6)特征(feature)、特征向量(featurevector)抽象地講,特征是用來把一個樣本對象映射到一個數(shù)字或類別的函數(shù),也常用來表示這些數(shù)字或類別(即一個樣本若干特征組成的特征向量中的每個分量)。在數(shù)據(jù)矩陣中,特征表示為列,每列包含把一個特征函數(shù)應(yīng)用到一組樣本上的結(jié)果,每行表示一個樣本若干特征組成的特征向量。8.1機器學(xué)習(xí)基本概念(7)特征提取器(featureextractor)把樣本映射到固定長度數(shù)組形式數(shù)據(jù)(如numpy數(shù)組、Python列表、元組以及只包含數(shù)值的pandas.DataFrame和pandas.Series對象)的轉(zhuǎn)換器,至少應(yīng)提供fit()、transform()和get_feature_names()方法。(8)目標(target)有監(jiān)督學(xué)習(xí)或半監(jiān)督學(xué)習(xí)中的因變量,一般作為參數(shù)y傳遞給評估器的擬合方法fit(),也稱作結(jié)果變量、理想值或標簽。8.1機器學(xué)習(xí)基本概念8.1機器學(xué)習(xí)基本概念(10)維度(dimension)一般指特征的數(shù)量,或者二維特征矩陣中列的數(shù)量,也是特定問題中每個樣本特征向量的長度。(11)早停法(earlystopping)把數(shù)據(jù)集分成訓(xùn)練集和測試集,使用訓(xùn)練集對模型進行訓(xùn)練,并周期性地使用測試集對模型進行測試和驗證,如果模型在測試集上的表現(xiàn)開始變差就停止訓(xùn)練,避免過擬合問題。(12)評估度量(evaluationmetrics)評估度量用來測量模型的表現(xiàn)有多好,也常指metrics模塊中的函數(shù)。8.1機器學(xué)習(xí)基本概念(13)擬合(fit)擬合泛指一類數(shù)據(jù)處理的方式,包括回歸、插值、逼近。簡單地說,對于平面上若干已知點,擬合是構(gòu)造一條光滑曲線,使得該曲線與這些點的分布最接近,曲線在整體上靠近這些點,使得某種意義下的誤差最小。(14)過擬合(overfit)當(dāng)模型設(shè)計過于復(fù)雜時,在擬合過程中過度考慮數(shù)據(jù)中的細節(jié),甚至使用了過多的噪聲,使得模型過分依賴訓(xùn)練數(shù)據(jù)(具有較高的方差和較低的偏差),導(dǎo)致新數(shù)據(jù)集上的表現(xiàn)很差,這種情況叫做過擬合??梢酝ㄟ^增加樣本數(shù)量、簡化模型、對數(shù)據(jù)進行降維減少使用的特征、早停、正則化或其他方法避免過擬合問題。(15)欠擬合(underfit)過于關(guān)注數(shù)據(jù)會導(dǎo)致過擬合,而忽略數(shù)據(jù)時容易導(dǎo)致欠擬合。模型不夠復(fù)雜,沒有充分考慮數(shù)據(jù)集中的特征,導(dǎo)致擬合能力不強,模型在訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)上的表現(xiàn)都很差,這種情況叫做欠擬合。8.1機器學(xué)習(xí)基本概念(16)填充算法(imputationalgorithms)大多數(shù)機器學(xué)習(xí)算法要求輸入沒有缺失值,否則無法正常工作。試圖填充缺失值的算法稱作填充算法或插補算法。(17)數(shù)據(jù)泄露(DataLeakage)預(yù)測器在訓(xùn)練時使用了在實際預(yù)測時不可用的數(shù)據(jù)特征,或者誤把預(yù)測結(jié)果的一部分甚至根據(jù)預(yù)測結(jié)果才能得到的結(jié)論當(dāng)作特征,從而導(dǎo)致模型看起來非常精確但在實際使用中的表現(xiàn)卻很差,此時稱作存在數(shù)據(jù)泄露。如果發(fā)現(xiàn)建立的模型非常精確,很可能存在數(shù)據(jù)泄露,應(yīng)仔細檢查與目標target相關(guān)的特征。8.1機器學(xué)習(xí)基本概念(18)有監(jiān)督學(xué)習(xí)(supervisedlearning)在訓(xùn)練模型時,如果每個樣本都有預(yù)期的標簽或理想值,稱作有監(jiān)督學(xué)習(xí)。(19)半監(jiān)督學(xué)習(xí)(semi-supervisedlearning)在訓(xùn)練模型時,可能只有部分訓(xùn)練數(shù)據(jù)帶有標簽或理想值,這種情況稱作半監(jiān)督學(xué)習(xí)。在半監(jiān)督學(xué)習(xí)中,一般給沒有標簽的樣本統(tǒng)一設(shè)置標簽為-1。(20)直推式學(xué)習(xí)(transductivelearning)直推式學(xué)習(xí)可以看作半監(jiān)督學(xué)習(xí)的一個子問題,或者是一種特殊的半監(jiān)督學(xué)習(xí)。直推式學(xué)習(xí)假設(shè)沒有標簽的數(shù)據(jù)就是最終用來測試的數(shù)據(jù),學(xué)習(xí)的目的就是在這些數(shù)據(jù)上取得最佳泛化能力。(21)無監(jiān)督學(xué)習(xí)(unsupervisedlearning)在訓(xùn)練模型時,如果每個樣本都沒有預(yù)期的標簽或理想值,并且模型和算法的目的是試圖發(fā)現(xiàn)樣本之間的關(guān)系,稱作無監(jiān)督學(xué)習(xí),例如聚類、主成分分析和離群值檢測。8.1機器學(xué)習(xí)基本概念(22)分類器(classifier)具有有限個可能的離散值作為結(jié)果的有監(jiān)督(或半監(jiān)督)預(yù)測器。(23)聚類器(clusterer)聚類屬于無監(jiān)督學(xué)習(xí)算法,具有有限個可能的離散輸出結(jié)果。(24)評估器(estimator)表示一個模型以及這個模型被訓(xùn)練和評估的方式,例如分類器、回歸器、聚類器。(25)離群點檢測器(outlierdetector)區(qū)分核心樣本和偏遠樣本的無監(jiān)督二分類預(yù)測器。(26)預(yù)測器(predictor)支持predict()和/或fit_predict()方法的評估器,可以是分類器、回歸器、離群點檢測器和聚類器等。(27)回歸器(regressor)處理連續(xù)輸出值的有監(jiān)督或半監(jiān)督預(yù)測器。(28)轉(zhuǎn)換器(transformer)支持transform()和/或fit_transform()方法的評估器。8.1機器學(xué)習(xí)基本概念(29)交叉驗證生成器(cross-validationgenerator)在不同的測試集上執(zhí)行多重評估,然后組合這些評估的得分,這種技術(shù)叫做交叉驗證。交叉驗證生成器用來把數(shù)據(jù)集分成訓(xùn)練集和測試集部分,提供split()和get_n_splits()方法,不提供fit()、set_params()和get_params()方法,不屬于評估器。(30)交叉驗證評估器(cross-validationestimator)具有內(nèi)置的交叉驗證能力、能夠自動選擇最佳超參數(shù)的評估器,例如ElasticNetCV和LogisticRegressionCV。(31)評分器(scorer)可調(diào)用對象,不屬于評估器,使用給定的測試數(shù)據(jù)評價評估器,返回一個數(shù)值,數(shù)值越大表示評估器的性能或表現(xiàn)越好。8.1機器學(xué)習(xí)基本概念(32)損失函數(shù)(lossfunction)用來計算單個樣本的預(yù)測結(jié)果與實際值之間誤差的函數(shù)。(33)風(fēng)險函數(shù)(riskfunction)損失函數(shù)的期望,表示模型預(yù)測的平均質(zhì)量。(34)代價函數(shù)(costfunction)用來計算整個訓(xùn)練集上所有樣本的預(yù)測結(jié)果與實際值之間誤差平均值的函數(shù),值越小表示模型的魯棒性越好,預(yù)測結(jié)果越準確。(35)目標函數(shù)(objectivefunction)目標函數(shù)=代價函數(shù)+懲罰項。8.1機器學(xué)習(xí)基本概念(36)坐標下降法(CoordinateDescent)算法在每次迭代中在當(dāng)前位置沿某個坐標的方向進行一維搜索和優(yōu)化以求得函數(shù)的局部極小值,在整個過程中循環(huán)使用不同的坐標方向。如果在某次迭代中函數(shù)沒有得到優(yōu)化,說明已經(jīng)達到一個駐點。8.1機器學(xué)習(xí)基本概念(37)梯度下降法(GradientDescent)對于可微函數(shù),其在每個方向上的偏導(dǎo)數(shù)組成的向量稱作梯度,梯度的方向表示變化的方向,梯度的模長或幅度表示變化的快慢。在求解機器學(xué)習(xí)算法的模型參數(shù)時,梯度下降是經(jīng)常使用的方法之一。在求解損失函數(shù)的最小值時,可以通過梯度下降法進行迭代求解,沿梯度的反方向進行搜索,當(dāng)梯度向量的幅度接近0時終止迭代,最終得到最小化的損失函數(shù)和模型參數(shù)值。8.1機器學(xué)習(xí)基本概念(38)隨機梯度下降(StochasticGradientDescent,SGD)隨機梯度下降是一個用于擬合線性模型的簡單但非常有效的方法,每次迭代時隨機抽取并使用一組樣本,尤其適用于樣本數(shù)量和特征數(shù)量都非常大的場合,其partial_fit()方法允許在線學(xué)習(xí)或核外學(xué)習(xí)。8.1機器學(xué)習(xí)基本概念(39)感知器(perceptron)感知器是一個適用于大規(guī)模學(xué)習(xí)的簡單分類算法,不需要學(xué)習(xí)率(監(jiān)督學(xué)習(xí)和深度學(xué)習(xí)中決定目標函數(shù)能否收斂到局部最小值以及何時收斂到最小值的超參數(shù)),也不進行正則化,只在出錯時更新模型,速度比SGD略快,得到的模型更稀疏。(40)被動攻擊算法(PassiveAggressiveAlgorithms)被動攻擊算法是一組用于大規(guī)模學(xué)習(xí)的算法,和感知器一樣不需要學(xué)習(xí)率,但進行正則化。8.1機器學(xué)習(xí)基本概念(41)泛化(generalization)使用通過對已知數(shù)據(jù)進行學(xué)習(xí)得到的模型對未知數(shù)據(jù)進行預(yù)測的過程。(42)正則化(regularization)正則化是指在損失函數(shù)的基礎(chǔ)上加上一個約束項(或稱作懲罰項、正則項),目的是為了防止過擬合。8.1機器學(xué)習(xí)基本概念(43)學(xué)習(xí)曲線(learningcurve)一種判斷模型性能的方法,描述數(shù)據(jù)集樣本數(shù)量的增加時模型得分變化情況,通過繪制學(xué)習(xí)曲線可以比較直觀了解模型的狀態(tài)。(44)召回率(recallrate)召回率也稱查全率。對于分類算法而言,也就是所有樣本中被識別為A類的樣本數(shù)量與實際屬于A類的樣本數(shù)量的比值。(45)準確率(precision)對于分類算法而言,準確率定義為被識別為A類的樣本中有多少確實屬于A類。8.2機器學(xué)習(xí)庫sklearn簡介模塊名稱簡單描述base包含所有評估器的基類和常用函數(shù),例如測試評估器是否為分類器的函數(shù)is_classifier()和測試評估器是否為回歸器的函數(shù)is_regressor()calibration包含預(yù)測概率校準的類和函數(shù)cluster包含常用的無監(jiān)督聚類算法的實現(xiàn),例如AffinityPropagation、AggomerativeClustering、Birch、DBSCAN、FeatureAgglomeration、KMeans、MiniBatchKMeans、MeanShift、SpectralClusteringcovariance包含用來估計給定點集協(xié)方差的算法實現(xiàn)cross_decomposition交叉分解模塊,主要包含偏最小二乘法(PLS)和經(jīng)典相關(guān)分析(CCA)算法的實現(xiàn)datasets包含加載常用參考數(shù)據(jù)集和生成模擬數(shù)據(jù)的工具8.2機器學(xué)習(xí)庫sklearn簡介decomposition包含矩陣分解算法的實現(xiàn),包括主成分分析(PCA)、非負矩陣分解(NMF)、獨立成分分析(ICA)等,該模塊中大部分算法可以用作降維技術(shù)discriminant_analysis主要包含線型判別分析(LDA)和二次判別分析(QDA)算法dummy包含使用簡單規(guī)則的分類器和回歸器,可以作為比較其他真實分類器和回歸器好壞的基線,不直接用于實際問題ensemble包含用于分類、回歸和異常檢測的集成方法feature_extraction從文本和圖像原始數(shù)據(jù)中提取特征feature_selection包含特征選擇算法的實現(xiàn),目前有單變量過濾選擇方法和遞歸特征消除算法gaussian_process實現(xiàn)了基于高斯過程的分類與回歸isotonic保序回歸8.2機器學(xué)習(xí)庫sklearn簡介impute包含用于填充缺失值的轉(zhuǎn)換器kernel_approximation實現(xiàn)了幾個基于傅里葉變換的近似核特征映射kernel_ridge實現(xiàn)了核嶺回歸linear_model實現(xiàn)了廣義線型模型,包括線性回歸、嶺回歸、貝葉斯回歸、使用最小角回歸和坐標下降法計算的Lasso和彈性網(wǎng)絡(luò)評估器,還實現(xiàn)了隨機梯度下降(SGD)相關(guān)的算法manifold流形學(xué)習(xí),實現(xiàn)了數(shù)據(jù)嵌入技術(shù)metrics包含評分函數(shù)、性能度量、成對度量和距離計算mixture實現(xiàn)了高斯混合建模算法model_selection實現(xiàn)了多個交叉驗證器類以及用于學(xué)習(xí)曲線、數(shù)據(jù)集分割的函數(shù)multiclass實現(xiàn)了多類和多標簽分類,該模塊中的估計器都屬于元估計器,需要使用基估計器類作為參數(shù)傳遞給構(gòu)造器。例如可以用來把一個二分類器或回歸器轉(zhuǎn)換為多類分類器8.2機器學(xué)習(xí)庫sklearn簡介multioutput實現(xiàn)了多輸出回歸與分類naive_bayes實現(xiàn)了樸素貝葉斯算法neighbors實現(xiàn)了k近鄰算法neural_network實現(xiàn)了神經(jīng)網(wǎng)絡(luò)模型pipeline實現(xiàn)了用來構(gòu)建混合評估器的工具inspection包含用于模型檢測的工具preprocessing包含縮放、居中、正則化、二值化和插補算法svm實現(xiàn)了支持向量機(SVM)算法tree包含用于分類和回歸的決策樹模型utils包含一些常用工具,例如查找所有正數(shù)中最小值的函數(shù)arrayfuncs.min_pos()、計算稀疏向量密度的函數(shù)extmath.density()8.2機器學(xué)習(xí)庫sklearn簡介方法名稱簡單描述fit()每個評估器都會提供這個方法,通常接收一些樣本X作為參數(shù),如果模型是有監(jiān)督的還會接收目標y作為參數(shù),以及其他用來描述樣本屬性的參數(shù),例如sample_weight。該方法應(yīng)該具備以下功能:清除評估器之前存儲的任意屬性,除非使用了熱啟動驗證和解釋參數(shù),如果參數(shù)非法則引發(fā)異常對輸入的數(shù)據(jù)進行驗證根據(jù)評價的參數(shù)和給定的數(shù)據(jù)評估并存儲模型屬性返回本次擬合好的評估器fit_predict()該方法的參數(shù)與fit()相同,但適用于無監(jiān)督的直推式評估器,訓(xùn)練模型并返回對給定訓(xùn)練數(shù)據(jù)的預(yù)測結(jié)果。在聚類器中,這些預(yù)測結(jié)果也會保存在labels_屬性中,fit_predict(X)的輸出通常等價于fit(X).predict(X)的結(jié)果8.2機器學(xué)習(xí)庫sklearn簡介fit_transform()轉(zhuǎn)換器對象的方法,用來訓(xùn)練評估器并返回轉(zhuǎn)換后的訓(xùn)練數(shù)據(jù)。該方法的參數(shù)與fit()相同,其輸出應(yīng)該和調(diào)用fit(X,...).transform(X)具有相同的形狀。但是在極個別情況中fit_transform(X,...)和fit(X,...).transform(X)的返回值并不一樣,此時需要對訓(xùn)練數(shù)據(jù)進行不同的處理。直推式轉(zhuǎn)換器可能會提供fit_transform()方法而不提供transform()方法,這樣比分別執(zhí)行fit()和transform()更高效。在歸納學(xué)習(xí)中,旨在從大量的經(jīng)驗數(shù)據(jù)中歸納抽取出一般的判定規(guī)則和模式,屬于從特殊到一般的學(xué)習(xí)方法,目的是得到一個應(yīng)用于新數(shù)據(jù)的廣義模型,用戶在進一步建模之前應(yīng)該注意不要對整個數(shù)據(jù)集使用fit_transform()方法,否則會導(dǎo)致數(shù)據(jù)泄露。get_feature_names()特征提取器的基本方法,也適用于在評估器的transform()方法輸出中獲取每列名字的轉(zhuǎn)換器。該方法輸出包含若干字符串的列表,可以接收字符串列表作為輸入用來指定輸出的列名,默認情況下輸入數(shù)據(jù)的特征被命名為x0,x1,...get_params()獲取所有參數(shù)和它們的值partial_fit()以在線方式訓(xùn)練評估器,重復(fù)調(diào)用該方法不會清除模型狀態(tài),而是使用給定的數(shù)據(jù)對模型進行更新8.2機器學(xué)習(xí)庫sklearn簡介predict()對每個樣本進行預(yù)測,通常只接收樣本矩陣X作為輸入。在分類器或回歸器中,預(yù)測結(jié)果必然是訓(xùn)練時使用的目標空間中的一個。盡管如此,即使傳遞給fit()方法的y是一個列表或其他類似于數(shù)組的數(shù)據(jù),predict()方法的輸出應(yīng)該總是一個數(shù)組或稀疏矩陣。在聚類器或離群點檢測中,預(yù)測結(jié)果是一個整數(shù)predict_proba()分類器和聚類器的方法,可以返回每個類的概率估計,其輸入通常是包含樣本特征向量的二維數(shù)組Xscore()預(yù)測器的方法,可以在給定數(shù)據(jù)集上評估預(yù)測結(jié)果,返回單個數(shù)值型得分,數(shù)值越大表示預(yù)測結(jié)果越好split()用于交叉驗證而不是評估器,該方法接收參數(shù)(X,y,groups),返回一個包含若干(train_idx,test_idx)元組的迭代器,用來把數(shù)據(jù)集分為訓(xùn)練集和測試集transform()在轉(zhuǎn)換器中,對輸入(通常只有X)進行轉(zhuǎn)換,結(jié)果是一個長度為n_samples并且列數(shù)固定的數(shù)組或稀疏矩陣,評估器尚未完成時調(diào)用該方法會引發(fā)異常8.2機器學(xué)習(xí)庫sklearn簡介8.3線性回歸算法原理與應(yīng)用-8.3.1線性回歸模型原理8.3.1線性回歸模型原理8.3.1線性回歸模型原理8.3.2sklearn中線性回歸模型的簡單應(yīng)用>>>fromsklearnimportlinear_model#導(dǎo)入線型模型模塊>>>regression=linear_model.LinearRegression()#創(chuàng)建線型回歸模型>>>X=[[3],[8]]#觀察值的x坐標>>>y=[1,2]#觀察值的y坐標>>>regression.fit(X,y)#擬合LinearRegression(copy_X=True,fit_intercept=True,n_jobs=1,normalize=False)>>>ercept_#截距,以下畫線結(jié)束0.40000000000000036>>>regression.coef_#斜率,回歸系數(shù)#反映了x對y影響的大小#以下畫線結(jié)束,表示模型自身的屬性#區(qū)別于用戶設(shè)置的參數(shù)array([0.2])>>>regression.predict([[6]])#對未知點進行預(yù)測,結(jié)果為數(shù)組array([1.6])8.3.3嶺回歸原理與sklearn實現(xiàn)8.3.3嶺回歸原理與sklearn實現(xiàn)>>>fromsklearn.linear_modelimportRidge>>>ridgeRegression=Ridge(alpha=10)#創(chuàng)建嶺回歸模型#設(shè)置約束項系數(shù)為10>>>X=[[3],[8]]>>>y=[1,2]>>>ridgeRegression.fit(X,y)#擬合Ridge(alpha=10,copy_X=True,fit_intercept=True,max_iter=None,normalize=False,random_state=None,solver='auto',tol=0.001)>>>ridgeRegression.predict([[6]])#預(yù)測array([1.55555556])>>>ridgeRegression.coef_#查看回歸系數(shù)array([0.11111111])>>>ridgeRercept_#截距0.888888888888888958.3.3嶺回歸原理與sklearn實現(xiàn)>>>ridgeRegression=Ridge(alpha=1.0)#設(shè)置約束項系數(shù)為1.0>>>ridgeRegression.fit(X,y)Ridge(alpha=1.0,copy_X=True,fit_intercept=True,max_iter=None,normalize=False,random_state=None,solver='auto',tol=0.001)>>>ridgeRegression.coef_array([0.18518519])>>>ridgeRercept_0.48148148148148162>>>ridgeRegression.predict([[6]])array([1.59259259])8.3.3嶺回歸原理與sklearn實現(xiàn)>>>ridgeRegression=Ridge(alpha=0.0)#約束項系數(shù)為0#等價于線性回歸>>>ridgeRegression.fit(X,y)Ridge(alpha=0.0,copy_X=True,fit_intercept=True,max_iter=None,normalize=False,random_state=None,solver='auto',tol=0.001)>>>ridgeRegression.coef_array([0.2])>>>ridgeRercept_0.39999999999999991>>>ridgeRegression.predict([[6]])array([1.6])8.3.3嶺回歸原理與sklearn實現(xiàn)>>>importnumpyasnp>>>fromsklearn.linear_modelimportRidgeCV>>>X=[[3],[8]]>>>y=[1,2]>>>reg=RidgeCV(alphas=np.arange(-10,10,0.2))#指定alpha參數(shù)的范圍>>>reg.fit(X,y)#擬合RidgeCV(alphas=array([-10.,-9.8,...,9.6,9.8]),cv=None,fit_intercept=True,gcv_mode=None,normalize=False,scoring=None,store_cv_values=False)>>>reg.alpha_#最佳數(shù)值#擬合之后該值才可用0.99999999999996092>>>reg.predict([[6]])#預(yù)測array([1.59259259])8.3.4套索回歸Lasso基本原理與sklearn實現(xiàn)8.3.4套索回歸Lasso基本原理與sklearn實現(xiàn)>>>fromsklearn.linear_modelimportLasso>>>X=[[3],[8]]>>>y=[1,2]>>>reg=Lasso(alpha=3.0)#懲罰項系數(shù)為3.0>>>reg.fit(X,y)#擬合Lasso(alpha=3.0,copy_X=True,fit_intercept=True,max_iter=1000,normalize=False,positive=False,precompute=False,random_state=None,selection='cyclic',tol=0.0001,warm_start=False)>>>reg.coef_#查看系數(shù)array([0.])>>>ercept_#查看截距1.5>>>reg.predict([[6]])array([1.5])8.3.4套索回歸Lasso基本原理與sklearn實現(xiàn)>>>reg=Lasso(alpha=0.2)>>>reg.fit(X,y)Lasso(alpha=0.2,copy_X=True,fit_intercept=True,max_iter=1000,normalize=False,positive=False,precompute=False,random_state=None,selection='cyclic',tol=0.0001,warm_start=False)>>>reg.coef_array([0.168])>>>ercept_0.57599999999999996>>>reg.predict([[6]])array([1.584])8.3.5彈性網(wǎng)絡(luò)基本原理與sklearn實現(xiàn)8.3.5彈性網(wǎng)絡(luò)基本原理與sklearn實現(xiàn)>>>fromsklearn.linear_modelimportElasticNet>>>reg=ElasticNet(alpha=1.0,l1_ratio=0.7)>>>X=[[3],[8]]>>>y=[1,2]>>>reg.fit(X,y)ElasticNet(alpha=1.0,copy_X=True,fit_intercept=True,l1_ratio=0.7,max_iter=1000,normalize=False,positive=False,precompute=False,random_state=None,selection='cyclic',tol=0.0001,warm_start=False)>>>reg.predict([[6]])array([1.54198473])>>>reg.coef_array([0.08396947])>>>ercept_1.03816793893129778.3.5彈性網(wǎng)絡(luò)基本原理與sklearn實現(xiàn)>>>reg=ElasticNet(alpha=1.0,l1_ratio=0.3)#修改參數(shù),進行對比>>>reg.fit(X,y)ElasticNet(alpha=1.0,copy_X=True,fit_intercept=True,l1_ratio=0.3,max_iter=1000,normalize=False,positive=False,precompute=False,random_state=None,selection='cyclic',tol=0.0001,warm_start=False)>>>reg.predict([[6]])array([1.56834532])>>>reg.coef_array([0.13669065])>>>ercept_0.748201438848920998.3.6使用線性回歸模型預(yù)測兒童身高理論上,一個人的身高除了隨年齡變大而增長之外,在一定程度上還受到遺傳和飲食習(xí)慣以及其他因素的影響。在這里我們把問題簡化一下,假定一個人的身高只受年齡、性別、父母身高、祖父母身高和外祖父母身高這幾個因素的影響,并假定大致符合線性關(guān)系。也就是說,在其他條件不變的情況下,隨著年齡的增長,會越來越高;同樣,對于其他條件都相同的兒童,其父母身高較大的話,兒童也會略高一些。但在實際應(yīng)用時要考慮到一個情況,人的身高不是一直在變高的,到了一定年齡之后就不再生長了,然后身高會長期保持固定而不再變化(不考慮年齡太大之后會稍微變矮一點的情況)。為了簡化問題,我們假設(shè)18歲之后身高不再變化。8.3.6使用線性回歸模型預(yù)測兒童身高importcopyimportnumpyasnpfromsklearnimportlinear_model#訓(xùn)練數(shù)據(jù),每一行表示一個樣本,包含的信息分別為:#兒童年齡,性別(0女1男)#父親、母親、祖父、祖母、外祖父、外祖母的身高x=np.array([[1,0,180,165,175,165,170,165],[3,0,180,165,175,165,173,165],[4,0,180,165,175,165,170,165],[6,0,180,165,175,165,170,165],[8,1,180,165,175,167,170,165],[10,0,180,166,175,165,170,165],[11,0,180,165,175,165,170,165],[12,0,180,165,175,165,170,165],[13,1,180,165,175,165,170,165],[14,0,180,165,175,165,170,165],[17,0,170,165,175,165,170,165]])#兒童身高,單位:cmy=np.array([60,90,100,110,130,140,150,164,160,163,168])8.3.6使用線性回歸模型預(yù)測兒童身高#創(chuàng)建線性回歸模型lr=linear_model.LinearRegression()#根據(jù)已知數(shù)據(jù)擬合最佳直線lr.fit(x,y)#待測的未知數(shù)據(jù),其中每個分量的含義和訓(xùn)練數(shù)據(jù)相同xs=np.array([[10,0,180,165,175,165,170,165],[17,1,173,153,175,161,170,161],[34,0,170,165,170,165,170,165]])foriteminxs:#為不改變原始數(shù)據(jù),進行深復(fù)制,并假設(shè)超過18歲以后就不再長高了#對于18歲以后的年齡,返回18歲時的身高item1=copy.deepcopy(item)ifitem1[0]>18:item1[0]=18print(item,':',lr.predict(item1.reshape(1,-1)))8.4邏輯回歸算法原理與應(yīng)用-8.4.1邏輯回歸算法原理與sklearn實現(xiàn)雖然名字中帶有“回歸”二字,但實際上邏輯回歸是一個用于分類的線性模型,通常也稱作最大熵分類或?qū)?shù)線性分類器。邏輯回歸的因變量既可以是二分類的,也可以是多分類的,但是二分類更常用一些。邏輯回歸常用于數(shù)據(jù)挖掘、疾病自動診斷、經(jīng)濟預(yù)測等領(lǐng)域,例如可以挖掘引發(fā)疾病的主要因素,或根據(jù)這些因素來預(yù)測發(fā)生疾病的概率。8.4.1邏輯回歸算法原理與sklearn實現(xiàn)參數(shù)名稱含義penalty用來指定懲罰時的范數(shù),默認為'l2',也可以為'l1',但求解器'newton-cg'、'sag'和'lbfgs'只支持'l2'C用來指定正則化強度的逆,必須為正實數(shù),值越小表示正則化強度越大(這一點和支持向量機類似),默認值為1.0solver用來指定優(yōu)化時使用的算法,該參數(shù)可用的值有'newton-cg'、'lbfgs'、'liblinear'、'sag'、'saga',默認值為'liblinear'multi_class取值可以為'ovr'或'multinomial',默認值為'ovr'。如果設(shè)置為'ovr',對于每個標簽擬合二分類問題,否則在整個概率分布中使用多項式損失進行擬合,該參數(shù)不適用于'liblinear'求解器n_jobs用來指定當(dāng)參數(shù)multi_class='ovr'時使用的CPU核的數(shù)量,值為-1時表示使用所有的核8.4.1邏輯回歸算法原理與sklearn實現(xiàn)方法功能fit(self,X,y,sample_weight=None)根據(jù)給定的訓(xùn)練數(shù)據(jù)對模型進行擬合predict_log_proba(self,X)對數(shù)概率估計,返回的估計值按分類的標簽進行排序predict_proba(self,X)概率估計,返回的估計值按分類的標簽進行排序predict(self,X)預(yù)測X中樣本所屬類的標簽score(self,X,y,sample_weight=None)返回給定測試數(shù)據(jù)和實際標簽相匹配的平均準確率densify(self)把系數(shù)矩陣轉(zhuǎn)換為密集數(shù)組格式sparsify(self)把系數(shù)矩陣轉(zhuǎn)換為稀疏矩陣格式8.4.1邏輯回歸算法原理與sklearn實現(xiàn)importnumpyasnpfromsklearn.linear_modelimportLogisticRegressionimportmatplotlib.pyplotasplt#構(gòu)造測試數(shù)據(jù)X=np.array([[i]foriinrange(30)])y=np.array([0]*15+[1]*15)#人為修改部分樣本的值y[np.random.randint(0,15,3)]=1y[np.random.randint(15,30,4)]=0print(y[:15])print(y[15:])#根據(jù)原始數(shù)據(jù)繪制散點圖plt.scatter(X,y)#創(chuàng)建并訓(xùn)練邏輯回歸模型reg=LogisticRegression('l2',C=3.0)reg.fit(X,y)#對未知數(shù)據(jù)進行預(yù)測print(reg.predict([[5],[19]]))#未知數(shù)據(jù)屬于某個類別的概率print(reg.predict_proba([[5],[19]]))#對原始觀察點進行預(yù)測yy=reg.predict(X)#根據(jù)預(yù)測結(jié)果繪制折線圖plt.plot(X,yy)plt.show()8.4.2使用邏輯回歸算法預(yù)測考試能否及格fromsklearn.linear_modelimportLogisticRegression#復(fù)習(xí)情況,格式為(時長,效率),其中時長單位為小時#效率為[0,1]之間的小數(shù),數(shù)值越大表示效率越高X_train=[(0,0),(2,0.9),(3,0.4),(4,0.9),(5,0.4),(6,0.4),(6,0.8),(6,0.7),(7,0.2),(7.5,0.8),(7,0.9),(8,0.1),(8,0.6),(8,0.8)]#0表示不及格,1表示及格y_train=[0,0,0,1,0,0,1,1,0,1,1,0,1,1]#創(chuàng)建并訓(xùn)練邏輯回歸模型reg=LogisticRegression()reg.fit(X_train,y_train)#測試模型X_test=[(3,0.9),(8,0.5),(7,0.2),(4,0.5),(4,0.7)]y_test=[0,1,0,0,1]score=reg.score(X_test,y_test)#預(yù)測并輸出預(yù)測結(jié)果learning=[(8,0.9)]result=reg.predict_proba(learning)msg='''模型得分:{0}復(fù)習(xí)時長為:{1[0]},效率為:{1[1]}您不及格的概率為:{2[0]}您及格的概率為:{2[1]}綜合判斷,您會:{3}'''.format(score,learning[0],result[0],'不及格'ifresult[0][0]>0.5else'及格')print(msg)8.5樸素貝葉斯算法原理與應(yīng)用-8.5.1基本概念(1)隨機試驗隨機試驗是指這樣的試驗,可以在相同條件下重復(fù)試驗多次,所有可能發(fā)生的結(jié)果都是已知的,但每次試驗到底會發(fā)生其中哪一種結(jié)果是無法預(yù)先確定的。(2)事件與空間在一個特定的試驗中,每一個可能出現(xiàn)的結(jié)果稱作一個基本事件,全體基本事件組成的集合稱為基本空間。在一定條件下必然會發(fā)生的事件稱為必然事件,可能發(fā)生也可能不發(fā)生的事件稱為隨機事件,不可能發(fā)生的事件稱為不可能事件,不可能同時發(fā)生的兩個事件稱為互斥事件,二者必有其一發(fā)生的事件稱為對立事件。例如,在水平地面上投擲硬幣的試驗中,正面朝上是一個基本事件,反面朝上是一個基本事件,基本空間中只包含這兩個隨機事件,并且二者既為互斥事件又是對立事件。8.5.1基本概念8.5.1基本概念8.5.1基本概念8.5.1基本概念8.5.1基本概念8.5.2樸素貝葉斯算法分類原理與sklearn實現(xiàn)8.5.2樸素貝葉斯算法分類原理與sklearn實現(xiàn)>>>importnumpyasnp>>>X=np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]])>>>y=np.array([1,1,1,2,2,2])>>>fromsklearn.naive_bayesimportGaussianNB>>>clf=GaussianNB()#創(chuàng)建高斯樸素貝葉斯模型>>>clf.fit(X,y)#擬合GaussianNB(priors=None)>>>clf.predict([[-0.8,-1]])#分類array([1])>>>clf.predict_proba([[-0.8,-1]])#樣本屬于不同類別的概率array([[9.99999949e-01,5.05653254e-08]])>>>clf.score([[-0.8,-1]],[1])#評分1.0>>>clf.score([[-0.8,-1],[0,0]],[1,2])#評分0.58.5.3使用樸素貝葉斯算法對中文郵件進行分類1)從電子郵箱中收集足夠多的垃圾郵件和非垃圾郵件的內(nèi)容作為訓(xùn)練集。2)讀取全部訓(xùn)練集,刪除其中的干擾字符,例如【】*。、,等等,然后分詞,再刪除長度為1的單個字,這樣的單個字對于文本分類沒有貢獻,剩下的詞匯認為是有效詞匯。3)統(tǒng)計全部訓(xùn)練集中每個有效詞匯的出現(xiàn)次數(shù),截取出現(xiàn)次數(shù)最多的前N(可以根據(jù)實際情況進行調(diào)整)個。4)根據(jù)每個經(jīng)過第2步預(yù)處理后的垃圾郵件和非垃圾郵件內(nèi)容生成特征向量,統(tǒng)計第3步中得到的N個詞語分別在該郵件中的出現(xiàn)頻率。每個郵件對應(yīng)于一個特征向量,特征向量長度為N,每個分量的值表示對應(yīng)的詞語在本郵件中出現(xiàn)的次數(shù)。例如,特征向量[3,0,0,5]表示第一個詞語在本郵件中出現(xiàn)了3次,第二個和第三個詞語沒有出現(xiàn),第四個詞語出現(xiàn)了5次。5)根據(jù)第4步中得到特征向量和已知郵件分類創(chuàng)建并訓(xùn)練樸素貝葉斯模型。6)讀取測試郵件,參考第2步,對郵件文本進行預(yù)處理,提取特征向量。7)使用第5步中訓(xùn)練好的模型,根據(jù)第6步提取的特征向量對郵件進行分類。8.5.3使用樸素貝葉斯算法對中文郵件進行分類參考代碼:code\貝葉斯中文郵件分類\貝葉斯垃圾郵件分類器.py補充:保存和加載訓(xùn)練結(jié)果code\貝葉斯中文郵件分類\get_words_from_file.pycode\貝葉斯中文郵件分類\貝葉斯垃圾郵件分類器_訓(xùn)練并保存結(jié)果.pycode\貝葉斯中文郵件分類\貝葉斯垃圾郵件分類器_加載并使用訓(xùn)練結(jié)果.py8.6決策樹與隨機森林算法應(yīng)用-8.6.1基本概念8.6.1基本概念8.6.2決策樹算法原理與sklearn實現(xiàn)決策樹屬于有監(jiān)督學(xué)習(xí)算法,需要根據(jù)已知樣本數(shù)據(jù)及其目標來訓(xùn)練并得到一個可以工作的模型,然后再使用該模型對未知樣本進行分類。在決策樹算法中,構(gòu)造一棵完整的樹并用來分類所需要的計算量和空間復(fù)雜度都非常高,可以采用剪枝算法在保證模型性能的前提下刪除不必要的分支。剪枝有預(yù)先剪枝和后剪枝兩大類方法,預(yù)先剪枝是指在樹的生長過程中設(shè)定一個指標,當(dāng)達到指標時就停止生長,當(dāng)前節(jié)點確定為葉子節(jié)點并不再分裂。預(yù)先剪枝適合大樣本集的情況,但有可能會導(dǎo)致模型的誤差比較大。后剪枝算法可以充分利用全部訓(xùn)練集的信息,但計算量和空間復(fù)雜度都要大很多,一般用于小樣本的場合。8.6.2決策樹算法原理與sklearn實現(xiàn)決策樹有多種實現(xiàn),常見的有ID3(IterativeDichotomiser3)、C4.5、C5.0和CART,其中ID3、C4.5、C5.0是屬于分類樹,CART屬于分類回歸樹。ID3以信息論為基礎(chǔ),以信息熵和信息增益為衡量標準,從而實現(xiàn)對數(shù)據(jù)的歸納分類。ID3算法從根節(jié)點開始,在每個節(jié)點上計算所有可能的特征的信息增益,選擇信息增益最大的一個特征作為該節(jié)點的特征進行分裂并創(chuàng)建子節(jié)點,不斷遞歸這個過程直到完成決策樹的構(gòu)建。ID3適合二分類問題,且僅能處理離散屬性。C4.5是對ID3的一種改進,根據(jù)信息增益率選擇屬性,在構(gòu)造樹的過程中進行剪枝操作,能夠?qū)B續(xù)屬性進行離散化。該算法先將特征值排序,以連續(xù)兩個值的中間值作為劃分標準。嘗試每一種劃分,并計算修正后的信息增益,選擇信息增益率最大的分裂點作為該屬性的分裂點。8.6.2決策樹算法原理與sklearn實現(xiàn)分類決策樹DecisionTreeClassifier類構(gòu)造方法的語法為:__init__(self,criterion='gini',splitter='best',max_depth=None,min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0,max_features=None,random_state=None,max_leaf_nodes=None,min_impurity_decrease=0.0,min_impurity_split=None,class_weight=None,presort=False)8.6.2決策樹算法原理與sklearn實現(xiàn)參數(shù)名稱含義criterion用來指定衡量分裂(創(chuàng)建子節(jié)點)質(zhì)量的標準,取值為'gini'時使用基尼值,為'entropy'時使用信息增益splitter用來指定在每個節(jié)點選擇劃分的策略,可以為'best'或'random'max_depth用來指定樹的最大深度,如果不指定則一直擴展節(jié)點,直到所有葉子包含的樣本數(shù)量少于min_samples_split,或者所有葉子節(jié)點都不再可分min_samples_split用來指定分裂節(jié)點時要求的最小樣本數(shù)量,值為實數(shù)時表示百分比min_samples_leaf葉子節(jié)點要求的最小樣本數(shù)量max_features用來指定在尋找最佳分裂時考慮的特征數(shù)量max_leaf_nodes用來設(shè)置葉子最大數(shù)量min_impurity_decrease如果一個節(jié)點分裂后可以使得不純度減少的值大于或等于min_impurity_decrease,則對該節(jié)點進行分裂min_impurity_split用來設(shè)置樹的生長過程中早停的閾值,如果一個節(jié)點的不純度高于這個閾值則進行分裂,否則為一個葉子不再分裂presort用來設(shè)置在擬合時是否對數(shù)據(jù)進行預(yù)排序來加速尋找最佳分裂的過程8.6.2決策樹算法原理與sklearn實現(xiàn)方法功能fit(self,X,y,sample_weight=None,check_input=True,X_idx_sorted=None)根據(jù)給定的訓(xùn)練集構(gòu)建決策樹分類器predict_log_proba(self,X)預(yù)測樣本集X屬于不同類別的對數(shù)概率predict_proba(self,X,check_input=True)預(yù)測樣本集X屬于不同類別的概率apply(self,X,check_input=True)返回每個樣本被預(yù)測的葉子索引decision_path(self,X,check_input=True)返回樹中的決策路徑predict(self,X,check_input=True)返回樣本集X的類別或回歸值score(self,X,y,sample_weight=None)根據(jù)給定的數(shù)據(jù)和標簽計算模型精度的平均值8.6.2決策樹算法原理與sklearn實現(xiàn)sklearn.tree模塊的函數(shù)export_graphviz()可以用來把訓(xùn)練好的決策樹數(shù)據(jù)導(dǎo)出,然后再使用擴展庫graphviz中的功能繪制決策樹圖形,export_graphviz()函數(shù)語法為:export_graphviz(decision_tree,out_file="tree.dot",max_depth=None,feature_names=None,class_names=None,label='all',filled=False,leaves_parallel=False,impurity=True,node_ids=False,proportion=False,rotate=False,rounded=False,special_characters=False,precision=3)8.6.2決策樹算法原理與sklearn實現(xiàn)>>>importnumpyasnp>>>fromsklearnimporttree>>>X=np.array([[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]])>>>y=[0,1,1,1,2,3,3,4]>>>clf=tree.DecisionTreeClassifier()#創(chuàng)建決策樹分類器>>>clf.fit(X,y)#擬合DecisionTreeClassifier(class_weight=None,criterion='gini',max_depth=None,max_features=None,max_leaf_nodes=None,min_impurity_decrease=0.0,min_impurity_split=None,min_samples_leaf=1,min_samples_split=2,min_weight_fraction_leaf=0.0,presort=False,random_state=None,splitter='best')>>>clf.predict([[1,0,0]])#分類array([2])>>>importgraphviz>>>dot_data=tree.export_graphviz(clf,out_file=None)#導(dǎo)出決策樹>>>graph=graphviz.Source(dot_data)#創(chuàng)建圖形>>>graph.render('result')#輸出PDF文件'result.pdf'8.6.3隨機森林算法原理與sklearn實現(xiàn)隨機森林是一種集成學(xué)習(xí)方法,基本思想是把幾棵不同參數(shù)的決策樹打包到一起,每棵決策樹單獨進行預(yù)測,然后計算所有決策樹預(yù)測結(jié)果的平均值(適用于回歸分析)或所有決策樹“投票”得到最終結(jié)果(適用于分類)。在隨機森林算法中,不會讓每棵樹都生成最佳的節(jié)點,而是在每個節(jié)點上隨機選擇一個特征進行分裂。8.6.3隨機森林算法原理與sklearn實現(xiàn)擴展庫sklearn在ensemble模塊中提供了隨機森林分類器RandomForestClassifier和隨機森林回歸器RandomForestRegressor。本節(jié)重點介紹隨機森林分類器的用法,該類構(gòu)造方法語法為__init__(self,n_estimators=10,criterion='gini',max_depth=None,min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0,max_features='auto',max_leaf_nodes=None,min_impurity_decrease=0.0,min_impurity_split=None,bootstrap=True,oob_score=False,n_jobs=1,random_state=None,verbose=0,warm_start=False,class_weight=None)8.6.3隨機森林算法原理與sklearn實現(xiàn)參數(shù)名稱含義n_estimators用來指定森林中樹的數(shù)量,默認為10criterion用來指定衡量分裂(創(chuàng)建子節(jié)點)質(zhì)量的函數(shù),取值為'gini'時使用基尼值,為'entropy'時使用信息增益max_features用來指定尋找最佳分裂時考慮的特征數(shù)量,可以是整數(shù),也可以是實數(shù)(表示百分比)、'auto'(相當(dāng)于max_features=sqrt(n_features)、'sqrt'(與'auto'含義相同)、'log2'(相當(dāng)于max_features=log2(n_features))、None(相當(dāng)于max_features=n_features)max_depth用來指定樹的最大深度min_samples_split用來指定分裂節(jié)點時要求的樣本數(shù)量最小值,值為實數(shù)時表示百分比min_samples_leaf用來指定葉子節(jié)點要求的樣本數(shù)量最小值max_leaf_nodes在最佳優(yōu)先方式中使用該參數(shù)生成樹min_impurity_split在樹的生長過程中早停的閾值,如果一個節(jié)點的不純度高于該閾值則進行分裂,否則為葉子節(jié)點min_impurity_decrease如果一個節(jié)點分裂后帶來的不純度減少的量大于等于該參數(shù)的值,就對該節(jié)點進行分裂bootstrap用來設(shè)置在構(gòu)建樹時是否可以重復(fù)使用同一個樣本oob_score用來設(shè)置是否使用out-of-bag樣本(本次沒有使用的樣本)估計泛化精度8.6.3隨機森林算法原理與sklearn實現(xiàn)方法功能predict(self,X)預(yù)測樣本集X中樣本的目標apply(self,X)把森林中的樹應(yīng)用到樣本集X,返回葉子索引decision_path(self,X)返回森林中的決策路徑fit(self,X,y,sample_weight=None)根據(jù)訓(xùn)練集(X,y)構(gòu)建包含若干決策樹的森林score(self,X,y,sample_weight=None)根據(jù)樣本集和對應(yīng)的真實值計算并返回模型得分8.6.3隨機森林算法原理與sklearn實現(xiàn)fromsklearn.datasetsimportmake_classificationfromsklearn.ensembleimportRandomForestClassifier#生成測試數(shù)據(jù)X,y=make_classification(n_samples=800,#800個樣本 n_features=6,#每個樣本6個特征 n_informative=4,#4個有用特征 n_redundant=2,#2個冗余特征 n_classes=2,#全部樣本分2類 shuffle=True)clf=RandomForestClassifier(n_estimators=4,#4個決策樹max_depth=3,#最多3層criterion='gini',max_features=0.1,min_samples_split=5)clf.fit(X,y)#包含擬合好的決策樹的列表print('決策樹列表:\n',clf.estimators_)#類標簽print('類標簽列表:\n',clf.classes_)#執(zhí)行fit()時特征的數(shù)量print('特征數(shù)量:\n',clf.n_features_)#包含每個特征重要性的列表,值越大表示該特征越重要print('每個特征的重要性:\n',clf.feature_importances_)x=[[1]*6]print('預(yù)測結(jié)果:\n',clf.predict(x))8.6.4使用決策樹算法判斷學(xué)員的Python水平fromsklearnimporttreeimportnumpyasnpquestions=('《Python程序設(shè)計基礎(chǔ)(第2版)》','《Python程序設(shè)計基礎(chǔ)與應(yīng)用》','《Python程序設(shè)計(第2版)》','《大數(shù)據(jù)的Python基礎(chǔ)》','《Python程序設(shè)計開發(fā)寶典》','《Python可以這樣學(xué)》','《中學(xué)生可以這樣學(xué)Python》','《Python編程基礎(chǔ)與案例集錦(中學(xué)版)》','《玩轉(zhuǎn)Python輕松過二級》','微信公眾號“Python小屋”的免費資料',)8.6.4使用決策樹算法判斷學(xué)員的Python水平#每個樣本的數(shù)據(jù)含義:#0沒看過,1很多看不懂,2大部分可以看懂,3沒壓力answers=[[3,3,3,3,3,3,3,3,3,3],[0,0,0,0,0,0,0,0,0,0],[1,1,1,1,1,1,1,1,1,1],[0,0,0,0,0,0,2,2,0,1],[0,0,0,0,3,3,0,0,0,3],

[3,3,0,3,0,0,0,0,3,1],[3,0,3,0,3,0,0,3,3,2],[0,0,3,0,3,3,0,0,0,3],[2,2,0,2,0,0,0,0,0,1],[0,2,1,3,1,1,0,0,2,1]]8.6.4使用決策樹算法判斷學(xué)員的Python水平labels=['超級高手','門外漢','初級選手','初級選手','高級選手','中級選手','高級選手','超級高手','初級選手','初級選手']clf=tree.DecisionTreeClassifier().fit(answers,labels)#訓(xùn)練yourAnswer=[]#顯示調(diào)查問卷,并接收用戶輸入forquestioninquestions:print('=========\n你看過董付國老師的',question,'嗎?')#確保輸入有效whileTrue:print('沒看過輸入0,很多看不懂輸入1,''大部分可以看懂輸入2,沒壓力輸入3')try:answer=int(input('請輸入:'))assert0<=answer<=3breakexcept:print('輸入無效,請重新輸入。')passyourAnswer.append(answer)

print(clf.predict(np.array(yourAnswer).reshape(1,-1)))#分類8.7支持向量機算法原理與應(yīng)用-8.7.1支持向量機算法基本原理與sklearn實現(xiàn)8.7.1支持向量機算法基本原理與sklearn實現(xiàn)8.7.1支持向量機算法基本原理與sklearn實現(xiàn)8.7.1支持向量機算法基本原理與sklearn實現(xiàn)支持向量機(SupportVectorMachine,SVM)是通過尋找超平面對樣本進行分隔從而實現(xiàn)分類或預(yù)測的算法,分隔樣本時的原則是使得間隔最大化,尋找間隔最大的支持向量。在二維平面上相當(dāng)于尋找一條“最粗的直線”把不同類別的物體分隔開,或者說尋找兩條平行直線對物體進行分隔并使得這兩條平行直線之間的距離最大。如果樣本在二維平面上不是線性可分的,無法使用一條簡單的直線將其完美分隔開,就嘗試著通過某種變換把所有樣本都投射到三維空間(例如,把一類物體沿z軸正方向移動靠近用戶,另一類物體沿z軸負方向移動遠離用戶)然后使用一個平面(例如,屏幕

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論