日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《菜菜的机器学习sklearn课堂,tomcat架构解析pdf

發布時間:2023/12/9 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《菜菜的机器学习sklearn课堂,tomcat架构解析pdf 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

最近正是跳槽季,可是最近許多的HR朋友卻經常在群里或者朋友圈里抱怨,說現在的應屆畢業生們跳槽跳的太快,“應屆生來了兩周就走人,我還什么都沒教給他呢!”“招人的速度趕不上他們離職的速度啊!”

而離職人員又委屈伸冤:“錢又少事又多,企業當我們免費勞動力嗎?”“你們公司不適合我,我還留著干嘛呢?”

那么問題來了,對于剛進入職場的這些新人們來說,到底工作多久跳槽才合適呢?

首先要強調的,就是三個月內最好不要辭職或者跳槽

from sklearn import tree

from sklearn.datasets import load_wine

from sklearn.model_selection import train_test_split

2、探索數據

wine = load_wine() #讀取紅酒數據集

wine.data #特征數據

wine.target # 標簽

wine.feature_names #特征名

wine.target_names #標簽名

#如果wine是一張表,應該長這樣:

import pandas as pd

pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)

3、劃分訓練集和測試集

#劃分30%的數據作為測試集

Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data, wine.target, test_size=0.3)

Xtrain.shape #訓練集: 124行,13個標簽

Xtest.shape #測試集: 54行,13個標簽

wine.data.shape #初始數據集: 178行,13個標簽

4、建立模型(只有一個參數criterion

clf = tree.DecisionTreeClassifier(criterion=“entropy”) #建模

clf = clf.fit(Xtrain, Ytrain) #訓練模型

score = clf.score(Xtest, Ytest) #返回預測的準確度

score

5、畫出一棵樹吧

feature_name = [‘酒精’,‘蘋果酸’,‘灰’,‘灰的堿性’,‘鎂’,‘總酚’,‘類黃酮’,‘非黃烷類酚類’,‘花青素’,‘顏色強度’,‘色調’,‘od280/od315稀釋葡萄酒’,‘脯氨酸’]

import graphviz

dot_data = tree.export_graphviz(clf, #模型

feature_names = feature_name, #特征名

class_names = [‘琴酒’, ‘雪莉’, ‘貝爾摩德’], #分類名

filled = True, #填充顏色表示不同的分類

rounded = True #圓角顯示

)

graph = graphviz.Source(dot_data)

graph

6、探索決策樹

clf.feature_importances_ #特征重要性

[*zip(feature_name, clf.feature_importances_)]

[(‘酒精’, 0.0),

(‘蘋果酸’, 0.0),

(‘灰’, 0.0),

(‘灰的堿性’, 0.0),

(‘鎂’, 0.05809139359761723),

(‘總酚’, 0.0),

(‘類黃酮’, 0.42809846427963527),

(‘非黃烷類酚類’, 0.0),

(‘花青素’, 0.0),

(‘顏色強度’, 0.18211551456095545),

(‘色調’, 0.0),

(‘od280/od315稀釋葡萄酒’, 0.0),

(‘脯氨酸’, 0.331694627561792)]

我們已經在只了解一個參數的情況下,建立了一棵完整的決策樹。但是回到步驟4建立模型,score會在某個值附近波動,引起步驟5中畫出來的每一棵樹都不一樣。它為什么會不穩定呢?如果使用其他數據集,它還會不穩定嗎?

我們之前提到過,無論決策樹模型如何進化,在分枝上的本質都還是追求某個不純度相關的指標的優化,而正如我們提到的,不純度是基于節點來計算的,也就是說,決策樹在建樹時,是靠優化節點來追求一棵優化的樹,但最優的節點能夠保證最優的樹嗎?集成算法被用來解決這個問題:sklearn表示,既然一棵樹不能保證最優,那就建更多的不同的樹,然后從中取最好的。怎樣從一組數據集中建不同的樹?在每次分枝時,不從使用全部特征,而是隨機選取一部分特征,從中選取不純度相關指標最優的作為分枝用的節點。這樣,每次生成的樹也就不同了。

clf = tree.DecisionTreeClassifier(criterion=“entropy”,random_state=30)

clf = clf.fit(Xtrain, Ytrain)

score = clf.score(Xtest, Ytest) #返回預測的準確度

score

[](()random_state、splitter

random_state 用來設置分枝中的隨機模式的參數,默認None,在高維度時隨機性會表現更明顯,低維度的數據(比如鳶尾花數據集),隨機性幾乎不會顯現。輸入任意整數,會一直長出同一棵樹,讓模型穩定下來。

splitter 也是用來控制決策樹中的隨機選項的,有兩種輸入值,

  • 輸入best,決策樹在分枝時雖然隨機,但是還是會優先選擇更重要的特征進行分枝(重要性可以通過屬性feature_importances_查看)

  • 輸入random,決策樹在分枝時會更加隨機,樹會因為含有更多的不必要信息而更深更大,并因這些不必要信息而降低對訓練集的擬合。這也是防止過擬合的一種方式。

當你預測到你的模型會過擬合,用這兩個參數來幫助你降低樹建成之后過擬合的可能性。當然,樹一旦建成,我們依然是使用剪枝參數來防止過擬合。

clf = tree.DecisionTreeClassifier(criterion=“entropy”

,random_state=30

,splitter=“random”

)

clf = clf.fit(Xtrain, Ytrain) #訓練模型

score = clf.score(Xtest, Ytest) #返回預測的準確度

score

import graphviz

dot_data = tree.export_graphviz(clf

,feature_names= feature_name

,class_names=[“琴酒”,“雪莉”,“貝爾摩德”]

,filled=True

,rounded=True

)

graph = graphviz.Source(dot_data)

graph

[](()剪枝參數

在不加限制的情況下,一棵決策樹會生長到衡量不純度的指標最優,或者沒有更多的特征可用為止。這樣的決策樹往往會過擬合,這就是說,它會在訓練集上表現很好,在測試集上卻表現糟糕。我們收集的樣本數據不可能和整體的狀況完全一致,因此當一棵決策樹對訓練數據有了過于優秀的解釋性,它找出的規則必然包含了訓練樣本中的噪聲,并使它對未知數據的擬合程度不足。

#我們的樹對訓練集的擬合程度如何?

score_train = clf.score(Xtrain, Ytrain)

score_train

為了讓決策樹有更好的泛化性,我們要對決策樹進行剪枝。剪枝策略對決策樹的影響巨大,正確的剪枝策略是優化決策樹算法的核心。sklearn為我們提供了不同的剪枝策略:

max_depth

  • 限制樹的最大深度,超過設定深度的樹枝全部剪掉

  • 這是用得最廣泛的剪枝參數,在高維度低樣本量時非常有效。決策樹多生長一層,對樣本量的需求會增加一倍,所以限制樹深度能夠有效地限制過擬合。在集成算法中也非常實用。實際使用時,建議從=3開始嘗試,看看擬合的效果再決定是否增加設定深度。

min_samples_leaf & min_samples_split

  • min_samples_leaf 限定一個節點在分枝后的每個子節點都必須包含至少min_samples_leaf個訓練樣本,否則分枝就不會發生,或者分枝會朝著滿足每個子節點都包含min_samples_leaf個樣本的方向去發生

一般搭配 max_depth 使用,在回歸樹中有神奇的效果,可以讓模型變得更加平滑。這個參數的數量設置得太小會引起過擬合,設置得太大就會阻止模型學習數據。一般來說,建議從=5開始使用。如果葉節點中含有的樣本量變化很大,建議輸入浮點數作為樣本量的百分比來使用。同時,這個參數可以保證每個葉子的最小尺寸,可以在回歸問題中避免低方差,過擬合的葉子節點出現。對于類別不多的分類問題,=1通常就是最佳選擇。

  • min_samples_split 限定一個節點必須要包含至少min_samples_split個訓練樣本,這個節點才允許被分枝,否則分枝就不會發生。

clf = tree.DecisionTreeClassifier(criterion=“entropy”

,random_state=30

,splitter=“random”

,max_depth=3

,min_samples_leaf=10

,min_samples_split=10

)

clf = clf.fit(Xtrain, Ytrain)

dot_data = tree.export_graphviz(clf

,feature_names= feature_name

,class_names=[“琴酒”,“雪莉”,“貝爾摩德”]

,filled=True

,rounded=True

)

graph = graphviz.Source(dot_data)

graph

clf.score(Xtrain,Ytrain)

clf.score(Xtest,Ytest)

max_features & min_impurity_decrease

  • max_features 是限制分枝時考慮的特征個數,超過限制個數的特征都會被舍棄。

和max_depth異曲同工,max_features是用來限制高維度數據的過擬合的剪枝參數,但其方法比較暴力,是直接限制可以使用的特征數量而強行使決策樹停下的參數,在不知道決策樹中的各個特征的重要性的情況下,強行設定這個參數可能會導致模型學習不足。如果希望通過降維的方式防止過擬合,建議使用PCA,ICA或者特征選擇模塊中的降維算法。

  • min_impurity_decrease 限制信息增益的大小,信息增益小于設定數值的分枝不會發生。這是在0.19版本中更新的功能,在0.19版本之前時使用min_impurity_split

如何確認最優的剪枝參數?

  • 使用確定超參數的曲線來進行判斷;

繼續使用我們已經訓練好的決策樹模型clf。

超參數的學習曲線,是一條以超參數的取值橫坐標模型的度量指標縱坐標的曲線,它是用來衡量不同超參數取值下模型的表現的線。

在我們建好的決策樹里,我們的模型度量指標就是score。

import matplotlib.pyplot as plt

test = []

for i in range(10):

clf = tree.DecisionTreeClassifier(max_depth=i+1

,criterion=“entropy”

,random_state=30

,splitter=“random”

)

clf = clf.fit(Xtrain, Ytrain)

score = clf.score(Xtest, Ytest)

test.append(score)

plt.plot(range(1,11),test,color=“red”,label=“max_depth”)

plt.legend()

plt.show()


思考:

1、剪枝參數一定能夠提升模型在測試集上的表現嗎?

答:調參沒有絕對的答案,一切都是看數據本身。

2、這么多參數,一個個畫學習曲線?

答:無論如何,剪枝參數的默認值會讓樹無盡地生長,這些樹在某些數據集上對內存的消耗可能非常巨大。所以如果你手中的數據集非常大,你已經預測到無論如何都是要剪枝的,那提前設定這些參數來控制樹的復雜性和大小會比較好。

[](()目標權重參數 class_weight、min_weight_fraction_leaf

完成樣本標簽平衡的參數。

樣本不平衡是指在一組數據集中,標簽的一類天生占有很大的比例

比如說,在銀行要判斷 “一個辦了信用卡的人是否會違約”,就是 “是"vs"否” (1% : 99%) 的比例。這種分類狀況下,即便模型什么也不做,全把結果預測成"否",正確率也能有99%。

class_weight

  • 我們要使用class_weight參數對樣本標簽進行一定的均衡,給少量的標簽更多的權重,讓模型更偏向少數類,向捕獲少數類的方向建模。

該參數默認None,此模式表示自動給與數據集中的所有標簽相同的權重。

min_weight_fraction_leaf

  • 有了權重之后,樣本量就不再是單純地記錄數目,而是受輸入的權重影響了,因此這時候剪枝,就需要搭配min_weight_fraction_leaf這個基于權重的剪枝參數來使用。

另請注意,基于權重的剪枝參數(例如min_weight_fraction_leaf)將比不知道樣本權重的標準(比如min_samples_leaf)更少偏向主導類。如果樣本是加權的,則使用基于權重的預修剪標準來更容易優化樹結構,這確保葉節點至少包含樣本權重的總和的一小部分。

[](()重要屬性 feature_importances_


屬性是在模型訓練之后,能夠調用查看的模型的各種性質。

對決策樹來說,最重要的是feature_importances_,能夠查看各個特征對模型的重要性。

[](()常用接口 fit、score、apply、predict


sklearn中許多算法的接口都是相似的,比如說我們之前已經用到的fit和score,幾乎對每個算法都可以使用。除了這兩個接口之外,決策樹最常用的接口還有apply和predict。

  • apply中輸入測試集返回每個測試樣本所在的葉子節點的索引

  • predict輸入測試集返回每個測試樣本的標簽,返回的內容一目了然并且非常容易

#apply返回每個測試樣本所在的葉子節點的索引

clf.apply(Xtest)

#predict返回每個測試樣本的分類/回歸結果

clf.predict(Xtest)

[](()實例:分類樹在合成數集上的表現

==================================================================================

啊啊,好難

我們在紅酒數據集上畫出了一棵樹,并且展示了多個參數會對樹形成這樣的影響,接下來,我們將在不同結構的數據集上測試一下決策樹的效果,來更好地理解決策樹。

1、導入需要的庫

import numpy as np

import matplotlib.pyplot as plt

from matplotlib.colors import ListedColormap

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import StandardScaler

from sklearn.datasets import make_moons, make_circles, make_classification

from sklearn.tree import DecisionTreeClassifier

2、生成三種數據集

我們從sklearn自帶的數據庫中生成三種類型的數據集:

1)月亮型數據,2)環形數據,3)二分型數據

#make_classification庫生成隨機的二分型數據

X, y = make_classification(n_samples=100, #生成100個樣本

n_features=2, #包含2個特征,即生成二維數據

n_redundant=0, #添加冗余特征0個

n_informative=2, #包含信息的特征是2個

random_state=1, #隨機模式1

n_clusters_per_class=1 #每個簇內包含的標簽類別有1個

)

#在這里可以查看一下X和y,其中X是100行帶有兩個2特征的數據,y是二分類標簽

#也可以畫出散點圖來觀察一下X中特征的分布

#plt.scatter(X[:,0],X[:,1])

#從圖上可以看出,生成的二分型數據的兩個簇離彼此很遠,這樣不利于我們測試分類器的效果,因此我們使用np生成

#隨機數組,通過讓已經生成的二分型數據點加減0~1之間的隨機數,使數據分布變得更散更稀疏

#注意,這個過程只能夠運行一次,因為多次運行之后X會變得非常稀疏,兩個簇的數據會混合在一起,分類器的效應會繼續下降

rng = np.random.RandomState(2) #生成一種隨機模式

X += 2 * rng.uniform(size=X.shape) #加減0~1之間的隨機數

linearly_separable = (X, y) #生成了新的X,依然可以畫散點圖來觀察一下特征的分布

#plt.scatter(X[:,0],X[:,1])

#用make_moons創建月亮型數據,make_circles創建環形數據,并將三組數據打包起來放在列表datasets中

datasets = [make_moons(noise=0.3, random_state=0),

make_circles(noise=0.2, factor=0.5, random_state=1),

linearly_separable]

3、畫出三種數據集和三棵決策樹的分類效應圖像

#創建畫布,寬高比為6*9

figure = plt.figure(figsize=(6, 9))

#設置用來安排圖像顯示位置的全局變量i

i = 1

#開始迭代數據,對datasets中的數據進行for循環

for ds_index, ds in enumerate(datasets):

#對X中的數據進行標準化處理,然后分訓練集和測試集

X, y = ds

X = StandardScaler().fit_transform(X)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4,random_state=42)

#找出數據集中兩個特征的最大值和最小值,讓最大值+0.5,最小值-0.5,創造一個比兩個特征的區間本身更大一點的區間

x1_min, x1_max = X[:, 0].min() - .5, X[:, 0].max() + .5

x2_min, x2_max = X[:, 1].min() - .5, X[:, 1].max() + .5

#用特征向量生成網格數據,網格數據,其實就相當于坐標軸上無數個點

#函數np.arange在給定的兩個數之間返回均勻間隔的值,0.2為步長

#函數meshgrid用以生成網格數據,能夠將兩個一維數組生成兩個二維矩陣。

#如果第一個數組是narray,維度是n,第二個參數是marray,維度是m。那么生成的第一個二維數組是以narray為行,m行的矩陣,而第二個二維數組是以marray的轉置為列,n列的矩陣

#生成的網格數據,是用來繪制決策邊界的,因為繪制決策邊界的函數contourf要求輸入的兩個特征都必須是二維的

array1,array2 = np.meshgrid(np.arange(x1_min, x1_max, 0.2),

np.arange(x2_min, x2_max, 0.2))

#接下來生成彩色畫布

#用ListedColormap為畫布創建顏色,#FF0000正紅,#0000FF正藍

cm = plt.cm.RdBu

cm_bright = ListedColormap([‘#FF0000’, ‘#0000FF’])

#在畫布上加上一個子圖,數據為len(datasets)行,2列,放在位置i上

ax = plt.subplot(len(datasets), 2, i)

#到這里為止,已經生成了0~1之間的坐標系3個了,接下來為我們的坐標系放上標題

#我們有三個坐標系,但我們只需要在第一個坐標系上有標題,因此設定if ds_index==0這個條件

if ds_index == 0:

ax.set_title(“Input data”)

#將數據集的分布放到我們的坐標系上

#先放訓練集

ax.scatter(X_train[:, 0], X_train[:, 1], c=y_train,

cmap=cm_bright,edgecolors=‘k’)

#放測試集

ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test,

cmap=cm_bright, alpha=0.6,edgecolors=‘k’)

#為圖設置坐標軸的最大值和最小值,并設定沒有坐標軸

ax.set_xlim(array1.min(), array1.max())

ax.set_ylim(array2.min(), array2.max())

ax.set_xticks(())

ax.set_yticks(())

#每次循環之后,改變i的取值讓圖每次位列不同的位置

i += 1

#至此為止,數據集本身的圖像已經布置完畢,運行以上的代碼,可以看見三個已經處理好的數據集

#############################從這里開始是決策樹模型##########################

#迭代決策樹,首先用subplot增加子圖,subplot(行,列,索引)這樣的結構,并使用索引i定義圖的位置

#在這里,len(datasets)其實就是3,2是兩列

#在函數最開始,我們定義了i=1,并且在上邊建立數據集的圖像的時候,已經讓i+1,所以i在每次循環中的取值是2,4,6

ax = plt.subplot(len(datasets),2,i)

#決策樹的建模過程:實例化 → fit訓練 → score接口得到預測的準確率

clf = DecisionTreeClassifier(max_depth=5)

clf.fit(X_train, y_train)

score = clf.score(X_test, y_test)

#繪制決策邊界,為此,我們將為網格中的每個點指定一種顏色[x1_min,x1_max] x [x2_min,x2_max]

#分類樹的接口,predict_proba,返回每一個輸入的數據點所對應的標簽類概率

#類概率是數據點所在的葉節點中相同類的樣本數量/葉節點中的樣本總數量

#由于決策樹在訓練的時候導入的訓練集X_train里面包含兩個特征,所以我們在計算類概率的時候,也必須導入

#結構相同的數組,即是說,必須有兩個特征

#ravel()能夠將一個多維數組轉換成一維數組

#np.c_是能夠將兩個數組組合起來的函數

#在這里,我們先將兩個網格數據降維降維成一維數組,再將兩個數組鏈接變成含有兩個特征的數據,再帶入決策

#樹模型,生成的Z包含數據的索引和每個樣本點對應的類概率,再切片,且出類概率

Z = clf.predict_proba(np.c_[array1.ravel(),array2.ravel()])[:, 1]

#np.c_[np.array([1,2,3]), np.array([4,5,6])]

#將返回的類概率作為數據,放到contourf里面繪制去繪制輪廓

Z = Z.reshape(array1.shape)

ax.contourf(array1, array2, Z, cmap=cm, alpha=.8)

#將數據集的分布放到我們的坐標系上

將訓練集放到圖中去

ax.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cm_bright,

edgecolors=‘k’)

將測試集放到圖中去

ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm_bright,

edgecolors=‘k’, alpha=0.6)

#為圖設置坐標軸的最大值和最小值

ax.set_xlim(array1.min(), array1.max())

ax.set_ylim(array2.min(), array2.max())

#設定坐標軸不顯示標尺也不顯示數字

ax.set_xticks(())

ax.set_yticks(())

#我們有三個坐標系,但我們只需要在第一個坐標系上有標題,因此設定if ds_index==0這個條件

if ds_index == 0:

ax.set_title(“Decision Tree”)

#寫在右下角的數字

ax.text(array1.max() - .3, array2.min() + .3, (‘{:.1f}%’.format(score*100)),

size=15, horizontalalignment=‘right’)

#讓i繼續加一

i += 1

plt.tight_layout()

plt.show()

復習的面試資料

這些面試全部出自大廠面試真題和面試合集當中,小編已經為大家整理完畢(PDF版)

  • 第一部分:Java基礎-中級-高級

  • 第二部分:開源框架(SSM:Spring+SpringMVC+MyBatis)

  • 第三部分:性能調優(JVM+MySQL+Tomcat)

  • 第四部分:分布式(限流:ZK+Nginx;緩存:Redis+MongoDB+Memcached;通訊:MQ+kafka)

  • 第五部分:微服務(SpringBoot+SpringCloud+Dubbo)

  • 第六部分:其他:并發編程+設計模式+數據結構與算法+網絡

進階學習筆記pdf

  • Java架構進階之架構筑基篇(Java基礎+并發編程+JVM+MySQL+Tomcat+網絡+數據結構與算法

  • Java架構進階之開源框架篇(設計模式+Spring+SpringMVC+MyBatis

  • Java架構進階之分布式架構篇 (限流(ZK/Nginx)+緩存(Redis/MongoDB/Memcached)+通訊(MQ/kafka)

  • Java架構進階之微服務架構篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)

[外鏈圖片轉存中…(img-pyT7k52W-1649752884207)]

  • 第五部分:微服務(SpringBoot+SpringCloud+Dubbo)

[外鏈圖片轉存中…(img-SqOrFQn5-1649752884208)]

  • 第六部分:其他:并發編程+設計模式+數據結構與算法+網絡

[外鏈圖片轉存中…(img-Op1xf6Pq-1649752884209)]

進階學習筆記pdf

  • Java架構進階之架構筑基篇(Java基礎+并發編程+JVM+MySQL+Tomcat+網絡+數據結構與算法

[外鏈圖片轉存中…(img-Kr25VKvc-1649752884209)]

  • Java架構進階之開源框架篇(設計模式+Spring+SpringMVC+MyBatis

[外鏈圖片轉存中…(img-gKi11oc7-1649752884210)]

[外鏈圖片轉存中…(img-gWUN9Ban-1649752884210)]

[外鏈圖片轉存中…(img-gOfjdbX4-1649752884211)]

  • Java架構進階之分布式架構篇 (限流(ZK/Nginx)+緩存(Redis/MongoDB/Memcached)+通訊(MQ/kafka)

[外鏈圖片轉存中…(img-swurKawQ-1649752884211)]

[外鏈圖片轉存中…(img-AsHH75tv-1649752884212)]

[外鏈圖片轉存中…(img-BY1hX9XM-1649752884212)]

  • Java架構進階之微服務架構篇(RPC+SpringBoot+SpringCloud+Dubbo+K8s)

[外鏈圖片轉存中…(img-JnFumZAz-1649752884213)]

[外鏈圖片轉存中…(img-2aNuYu6L-1649752884213)]

阿里P7熬夜整理的《Java全套學習手冊》,火爆IT圈

總結

以上是生活随笔為你收集整理的《菜菜的机器学习sklearn课堂,tomcat架构解析pdf的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。