長江禁捕工作將納入地方政府績效考核體系 2020年底長江將暫定實行10年禁捕

摘錄自2019年1月14日新浪網報導

據陸媒報導,為養護長江水生生物資源、保護生物多樣性,自2003年以來,長江武漢段每年都要組織1次至3次人工增殖放流。

而現在訂定2020年底以前,長江乾流和重要支流除保護區以外水域完成漁民退捕,暫定實行10年全面禁捕。 

近日中國農業農村部、財政部、人力資源社會保障部等三部委聯合印發通知公佈《長江流域重點水域禁捕和建立補償制度實施方案》,中央財政採取一次性補助與過渡期補助相結合的方式對禁捕工作給予適當支持。退捕漁民臨時生活補助、社會保障、職業技能培訓等相關工作所需資金,引導退捕漁民轉崗、就業、創業。 

本站聲明:網站內容來源於裝修網https://e-info.org.tw/,如有侵權,請聯繫我們本站聲明:網站內容來源再生能源資訊網https://e-info.org.tw/,如有侵權請聯繫我們,我們將及時處理本站聲明:網站內容來源再生能源資訊網https://e-info.org.tw/,如有侵權請聯繫我們,我們將及時處理

 

【生活常識】

飲用桶裝水到底安不安全? 破解錯誤迷思!

選用哪種桶裝水,外宿露營超方便?

非洲豬瘟甘肅淪陷 中國疫情擴大到24省區

摘錄自2019年1月13日中央社報導

中國非洲豬瘟疫情擴大。位處西北部的甘肅省慶城縣1月13日被證實有豬隻感染,爆發疫情的養豬戶共養殖109頭生豬,有44頭發病,其中9頭死亡。甘肅因此成為中國第24個出現非洲豬瘟的省區;這項疫情也是中國官方公布的第106例非洲豬瘟疫情。

由於甘肅爆發非洲豬瘟疫情,中國31個省區中,僅剩下西北的新疆、西藏、寧夏,華南的廣西、海南,華北的山東、河北等7個省區尚未傳出疫情。

本站聲明:網站內容來源於裝修網https://e-info.org.tw/,如有侵權,請聯繫我們本站聲明:網站內容來源再生能源資訊網https://e-info.org.tw/,如有侵權請聯繫我們,我們將及時處理本站聲明:網站內容來源再生能源資訊網https://e-info.org.tw/,如有侵權請聯繫我們,我們將及時處理

 

【工業材料相關資訊推薦】

北部螺絲、螺帽專賣店-居家修繕大小事!

特製螺絲工廠批發-精密零件專售

不鏽鋼螺絲的應用常識-五金修繕

不鏽鋼螺絲一般用於什麼地方做固定?

打開屏東菸葉廠 工業遺址活化 民眾:產業脈絡不能捨棄

中國非洲豬瘟疫情擴大。位處西北部的甘肅省慶城縣1月13日被證實有豬隻感染,爆發疫情的養豬戶共養殖109頭生豬,有44頭發病,其中9頭死亡。甘肅因此成為中國第24個出現非洲豬瘟的省區;這項疫情也是中國官方公佈的第106例非洲豬瘟疫情。

由於甘肅爆發非洲豬瘟疫情,中國31個省區中,僅剩下西北的新疆、西藏、寧夏,華南的廣西、海南,華北的山東、河北等7個省區尚未傳出疫情。

環境資訊中心特約記者李育琴屏東報導本站聲明:網站內容來源於裝修網https://e-info.org.tw/,如有侵權,請聯繫我們本站聲明:網站內容來源再生能源資訊網https://e-info.org.tw/,如有侵權請聯繫我們,我們將及時處理本站聲明:網站內容來源再生能源資訊網https://e-info.org.tw/,如有侵權請聯繫我們,我們將及時處理

 

【在地推薦】

家庭、朋友聚會,享受輕鬆烤肉必備外燴烤爐NO.1

各種攤販小吃設備,沙威瑪機自動旋轉烤玉米機,側火烤爐應有盡有!

營業用紅外線烤爐比價站,怕你買貴,幫你找好康~

必買推薦!上下火烤爐全台最便宜都在這!

紐約州推動立法禁用一次性塑膠袋 增加押瓶費

摘錄自2019年1月13日世界日報報導

為減少垃圾丟棄保護環境,紐約州長葛謨(Andrew Cuomo)13日宣布,將推動立法在全州範圍內禁止使用一次性塑膠袋,同時將推動擴大紐約州「押瓶法」(Bottle Bill)的覆蓋範圍,允許紐約州絕大部分非酒精飲料的售價上加入5分錢的押瓶費。

禁塑令和「押瓶法」擴大覆蓋範圍都將納入2019財年行政預算案(Executive Budget)中。

本站聲明:網站內容來源於裝修網https://e-info.org.tw/,如有侵權,請聯繫我們本站聲明:網站內容來源再生能源資訊網https://e-info.org.tw/,如有侵權請聯繫我們,我們將及時處理本站聲明:網站內容來源再生能源資訊網https://e-info.org.tw/,如有侵權請聯繫我們,我們將及時處理

 

【其他文章推薦】

示波器探測執行效能最佳化的8大秘訣

測試專家告訴你如何好好使用示波器

影響示波器測試準確度的五大因素

選擇示波器的10 項考量因素

新娘是親妹妹!新郎「感動淚灑現場」被狂酸 家人「出面還原結婚真相」網心碎:一定要幸福

籌備許久終於到了舉辦婚禮的這一天,想必新人一定是既緊張又期待,想到未來就要和愛人攜手共度下半輩子,內心就感到無比激動。 然而,柬埔寨日前一位新郎卻在婚禮上不停哭泣,更奇怪的是,他身旁的新娘竟是他的親妹妹,正當大家納悶不已的同時,才發現這背後藏著一段心酸故事… 

 

8日,這位新郎計畫要在這一天舉行盛大婚禮,並邀請大批親友來到現場見證,不過從婚禮側拍影片來看,可以發現他的臉色顯得極為凝重,眼淚完全止不住,至於一旁的妹妹則是不斷伸手替他擦掉眼淚,畫面令人於心不忍。 

 

原來新郎身有殘.疾,無法正常行走,原以為自己總算找到幸福,想不到結婚這一天,新娘卻遲遲沒有現身,讓他一度心碎淚崩,由於場地早就已經布置完畢,親友也陸續到場,不得已之下才會由新郎妹妹「上場代打」,披上婚紗和哥哥走完婚禮儀式。 

 

事後新郎家人才得知,新娘家人因為嫌棄哥哥行動不便,才會要求新娘在婚禮當天落跑,這樣的舉動也讓新郎家族十分氣憤,而新郎弟弟事後也在臉書分享這段故事,並痛批女方及其家族,痛訴哥哥原先以為能和愛人步入婚姻,結果新娘卻因家人施予壓力而落跑,讓他們為了不讓親友失望,只好讓妹妹代替擔任新娘。 

 

「既然沒辦法接受,為什麼不早一點說,還要闖進我哥的生命裡?妳和妳家人為什麼要這樣?怎麼忍心傷害我哥,還有我們一家人的感情… 」弟弟也不忘替哥哥打氣,鼓勵哥哥一定要堅強,同時也認為:「對方總有一天會後悔的!」 

 

這段故事曝光後,立即引起熱烈回響,不少網友替新郎加油打氣,同時也希望他能夠早日尋得真愛,「真的好讓人難過」、「新娘真的很可惡,不但傷害到新郎的尊嚴,也傷害了整個家族」、「為什麼不當面說清楚,一定要用這種方式讓新郎這麼傷心」 、「加油!一定會有更美好的愛情在等待你的」。    

如果家人反對,為什麼不提前告訴新郎,一定要在婚禮當天以這樣的方式告知呢…新郎該有多傷心阿!

延伸閱讀:真實落跑新郎!婚禮當天新郎消失 新娘走上台「親自向170桌賓客道歉」百萬網友心疼:妳很勇敢

來源:Ettoday、EBC

本站聲明:網站內容來源http://www.look543.com,如有侵權,請聯繫我們,我們將及時處理

電子菸
電子煙
電子菸

機器學習之決策樹原理和sklearn實踐

1. 場景描述

時間:早上八點,地點:婚介所

‘閨女,我有給你找了個合適的對象,今天要不要見一面?’

‘多大?’ ‘26歲’

‘長的帥嗎?’ ‘還可以,不算太帥’

‘工資高嗎?’ ‘略高於平均水平’

‘會寫代碼嗎?’ ‘人家是程序員,代碼寫的棒着呢!’

‘好,把他的聯繫方式發過來吧,我抽空見一面’

上面的場景描述摘抄自 ,是一個典型的決策樹分類問題,通過年齡、長相、工資、是否會編程等特徵屬性對介紹對象進行是否約會進行分類

決策樹是一種自上而下,對樣本數據進行樹形分類的過程,由結點和有向邊組成,每個結點(恭弘=恭弘=恭弘=叶 恭弘 恭弘 恭弘結點除外)便是一個特徵或屬性,恭弘=恭弘=恭弘=叶 恭弘 恭弘 恭弘結點表示類別。從頂部根結點開始,所有樣本聚在儀器,經過根結點的劃分,樣本被分到不同的子結點中。再根據子結點的特徵進一步劃分,直至樣本都被分到某一類別(恭弘=恭弘=恭弘=叶 恭弘 恭弘 恭弘子結點)中

2. 決策樹原理

決策樹作為最基礎、最常見的有監督學習模型,常被用於分類問題和回歸問題,將決策樹應用集成思想可以得到隨機森林、梯度提升決策樹等模型。其主要優點是模型具有可讀性,分類速度快。決策樹的學習通常包括三個步驟:特徵選擇、決策樹的生成和決策樹的修剪,下面對特徵選擇算法進行描述和區別

2.1 ID3—最大信息增益

在信息論與概率統計中,熵(entropy)是表示隨機變量不確定性的度量,設X是一個取有限個值的隨機變量,其概率分佈為:\[P(X=X_i)=P_i (i = 1,2,…,n)\],則隨機變量X的熵定義為:\[H(X) = -\sum_{i=1}^np_i\log{p_i}\]表達式中的對數以2為底或以e為底,這時熵的單位分別稱作bit或nat,從表達式可以看出X的熵與X的取值無關,所以X的熵也記作\(H(p)\),即\[H(p) = -\sum_{x=1}^np_i\log{p_i}\]熵取值越大,隨機變量的不確定性越大

條件熵:

條件熵H(Y|X)表示在已知隨機變量X的條件下,隨機變量Y的不確定性,隨機變量X給定的條件下隨機變量Y的條件熵定義為X給定條件下Y的條件概率分佈的熵對X的數學期望\[H(Y|X) = \sum_{i=1}^nP(X=X_i)H(Y|X=X_i)\]

信息增益:\[g(D,A) = H(D) – H(D|A)\]

import pandas as pd
data = {
        '年齡':['老','年輕','年輕','年輕','年輕'],
        '長相':['帥','一般','丑','一般','一般'],
        '工資':['高','中等','高','高','低'],
        '寫代碼':['不會','會','不會','會','不會'],
        '類別':['不見','見','不見','見','不見']}
frame = pd.DataFrame(data,index=['小A','小B','小C','小D','小L'])
print(frame)
    年齡  長相  工資 寫代碼  類別
小A   老   帥   高  不會  不見
小B  年輕  一般  中等   會   見
小C  年輕   丑   高  不會  不見
小D  年輕  一般   高   會   見
小L  年輕  一般   低  不會  不見
import math
print(math.log(3/5))
print('H(D):',-3/5 *math.log(3/5,2) - 2/5*math.log(2/5,2))
print('H(D|年齡)',1/5*math.log(1,2)+4/5*(-1/2*math.log(1/2,2)-1/2*math.log(1/2,2)))
print('以同樣的方法計算H(D|長相),H(D|工資),H(D|寫代碼)')
print('H(D|長相)',0.551)
print('H(D|工資)',0.551)
print('H(D|寫代碼)',0)
-0.5108256237659907
H(D): 0.9709505944546686
H(D|年齡) 0.8
以同樣的方法計算H(D|長相),H(D|工資),H(D|寫代碼)
H(D|長相) 0.551
H(D|工資) 0.551
H(D|寫代碼) 0

計算信息增益:g(D,寫代碼)=0.971最大,可以先按照寫代碼來拆分決策樹

2.2 C4.5—最大信息增益比

以信息增益作為劃分訓練數據集的特徵,存在偏向於選擇取值較多的問題,使用信息增益比可以對對着問題進行校正,這是特徵選擇的另一標準
信息增益比定義為其信息增益g(D,A)與訓練數據集D關於特徵A的值的熵\(H_A(D)\)之比:\[g_R(D,A) = \frac{g(D,A)}{H_A(D)}\]

\[H_A(D) = -\sum_{i=1}^n\frac{|D_i|}{|D|}\log\frac{|D_i|}{|D|}\]

拿上面ID3的例子說明:
\[H_年齡(D) = -1/5*math.log(1/5,2)-4/5*math.log(4/5,2)\]

\[g_R(D,年齡) = H_{年齡}(D)/g(D,年齡) = 0.171/0.722 = 0.236 \]

2.3 CART—-最大基尼指數(Gini)

Gini描述的是數據的純度,與信息熵含義類似,分類問題中,假設有K個類,樣本點數據第k類的概率為\(P_k\),則概率分佈的基尼指數定義為:
\[Gini(p) = 1- \sum_{k=1}^Kp_k(1-p_k) = 1 – \sum_{k=1}^Kp_{k}^2\]
對於二分類問題,弱樣本點屬於第1個類的概率是p,則概率分佈的基尼指數為\[Gini(p) = 2p(1-p)\],對於給定的樣本幾何D,其基尼指數為\[Gini(D) = 1 – \sum_{k=1}^K[\frac{|C_k|}{|D|}]^2\]注意這裏\(C_k\)是D種屬於第k類的樣本子集,K是類的個數,如果樣本幾個D根據特徵A是否取某一可能指a被分割成D1和D2兩部分,則在特徵A的條件下,集合D的基尼指數定義為\[Gini(D,A) = \frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2)\]
\[Gini(D|年齡=老)=1/5*(1-1)+4/5*[1-(1/2*1/2+1/2*1/2)] = 0.4\]

CART在每一次迭代種選擇基尼指數最小的特徵及其對應的切分點進行分類

2.4 ID3、C4.5與Gini的區別

2.4.1 從樣本類型角度

從樣本類型角度,ID3隻能處理離散型變量,而C4.5和CART都處理連續性變量,C4.5處理連續性變量時,通過對數據排序之後找到類別不同的分割線作為切割點,根據切分點把連續型數學轉換為bool型,從而將連續型變量轉換多個取值區間的離散型變量。而對於CART,由於其構建時每次都會對特徵進行二值劃分,因此可以很好地適合連續性變量。

2.4.2 從應用角度

ID3和C4.5隻適用於分類任務,而CART既可以用於分類也可以用於回歸

2.4.3 從實現細節、優化等角度

ID3對樣本特徵缺失值比較敏感,而C4.5和CART可以對缺失值進行不同方式的處理,ID3和C4.5可以在每個結點熵產生出多叉分支,且每個特徵在層級之間不會復用,而CART每個結點只會產生兩個分支,因此會形成一顆二叉樹,且每個特徵可以被重複使用;ID3和C4.5通過剪枝來權衡樹的準確性和泛化能力,而CART直接利用全部數據發現所有可能的樹結構進行對比。

3. 決策樹的剪枝

3.1 為什麼要進行剪枝?

對決策樹進行剪枝是為了防止過擬合

根據決策樹生成算法通過訓練數據集生成了複雜的決策樹,導致對於測試數據集出現了過擬合現象,為了解決過擬合,就必須考慮決策樹的複雜度,對決策樹進行剪枝,剪掉一些枝恭弘=恭弘=恭弘=叶 恭弘 恭弘 恭弘,提升模型的泛化能力

決策樹的剪枝通常由兩種方法,預剪枝和后剪枝

3.2 預剪枝

預剪枝的核心思想是在樹中結點進行擴展之前,先計算當前的劃分是否能帶來模型泛化能力的提升,如果不能,則不再繼續生長子樹。此時可能存在不同類別的樣本同時存於結點中,按照多數投票的原則判斷該結點所屬類別。預剪枝對於何時停止決策樹的生長有以下幾種方法

  • (1)當樹達到一定深度的時候,停止樹的生長
  • (2)當恭弘=恭弘=恭弘=叶 恭弘 恭弘 恭弘結點數到達某個閾值的時候,停止樹的生長
  • (3)當到達結點的樣本數量少於某個閾值的時候,停止樹的生長
  • (4)計算每次分裂對測試集的準確度提升,當小於某個閾值的時候,不再繼續擴展

預剪枝思想直接,算法簡單,效率高特點,適合解決大規模問題。但如何準確地估計何時停止樹的生長,針對不同問題會有很大差別,需要一定的經驗判斷。且預剪枝存在一定的局限性,有欠擬合的風險

3.3 后剪枝

后剪枝的核心思想是讓算法生成一顆完全生長的決策樹,然後從底層向上計算是否剪枝。剪枝過程將子樹刪除,用一個恭弘=恭弘=恭弘=叶 恭弘 恭弘 恭弘結點代替,該結點的類別同樣按照多數投票原則進行判斷。同樣地,后剪枝恭弘=恭弘=恭弘=叶 恭弘 恭弘 恭弘可以通過在測試集上的準確率進行判斷,如果剪枝過後的準確率有所提升,則進行剪枝,后剪枝方法通常可以得到泛化能力更強的決策樹,但時間開銷更大

損失函數

\[C_a(T) = \sum_{t=1}^{|T|}N_tH_t(T) + a|T|\]

\(其中|T|為恭弘=恭弘=恭弘=叶 恭弘 恭弘 恭弘結點個數,N_t為結點t的樣本個數,H_t(T)為結點t的信息熵,a|T|為懲罰項,a>=0\)

\[C_a(T) = \sum_{t=1}^{|T|}N_tH_t(T) + a|T| = -\sum_{t=1}^{|T|}\sum_{k=1}^KN_{tk}\log \frac{N_{tk}}{N_t} + a|T|\]

注意:上面的公式中是\(N_{tk}\log \frac{N_{tk}}{N_t}\),而不是\(\frac{N_{tk}}{N_t} \log \frac{N_{tk}}{N_t}\)

令:\[C_a(T) = C(T) + a|T|\]

\(C(T)\)表示模型對訓練數據的預測誤差,即模型與訓練數據的擬合程度,|T|表示模型複雜度,參數a>=0控制兩者的影響力,較大的a促使選擇較簡單的模型,較小的a促使選擇複雜的模型,a=0意味着只考慮模型與訓練數據的擬合程度,不考慮模型的複雜度

4. 使用sklearn庫為衛星數據集訓練並微調一個決策樹

4.1 需求

  • a.使用make_moons(n_samples=10000,noise=0.4)生成一個衛星數據集
  • b.使用train_test_split()拆分訓練集和測試集
  • c.使用交叉驗證的網格搜索為DecisionTreeClassifier找到合適的超參數,提示:嘗試max_leaf_nodes的多種值
  • d.使用超參數對整個訓練集進行訓練,並測量模型測試集上的性能

代碼實現

from sklearn.datasets import make_moons
import numpy as np
import pandas as pd
dataset = make_moons(n_samples=10000,noise=0.4)
print(type(dataset))
print(dataset)
<class 'tuple'>
(array([[ 0.24834453, -0.11160162],
       [-0.34658051, -0.43774172],
       [-0.25009951, -0.80638312],
       ...,
       [ 2.3278198 ,  0.39007769],
       [-0.77964208,  0.68470383],
       [ 0.14500963,  1.35272533]]), array([1, 1, 1, ..., 1, 0, 0], dtype=int64))
dataset_array = np.array(dataset[0])
label_array = np.array(dataset[1])
print(dataset_array.shape,label_array.shape)
(10000, 2) (10000,)
# 拆分數據集
from sklearn.model_selection import train_test_split
x_train,x_test = train_test_split(dataset_array,test_size=0.2,random_state=42)
print(x_train.shape,x_test.shape)
y_train,y_test = train_test_split(label_array,test_size=0.2,random_state=42)
print(y_train.shape,y_test.shape)
(8000, 2) (2000, 2)
(8000,) (2000,)
# 使用交叉驗證的網格搜索為DecisionTreeClassifier找到合適的超參數
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV

decisionTree = DecisionTreeClassifier(criterion='gini')
param_grid = {'max_leaf_nodes': [i for i in range(2,10)]}
gridSearchCV = GridSearchCV(decisionTree,param_grid=param_grid,cv=3,verbose=2)
gridSearchCV.fit(x_train,y_train)
Fitting 3 folds for each of 8 candidates, totalling 24 fits
[CV] max_leaf_nodes=2 ................................................
[CV] ................................. max_leaf_nodes=2, total=   0.0s
[CV] max_leaf_nodes=2 ................................................
[CV] ................................. max_leaf_nodes=2, total=   0.0s
[CV] max_leaf_nodes=2 ................................................
[CV] ................................. max_leaf_nodes=2, total=   0.0s
[CV] max_leaf_nodes=3 ................................................
[CV] ................................. max_leaf_nodes=3, total=   0.0s
[CV] max_leaf_nodes=3 ................................................
[CV] ................................. max_leaf_nodes=3, total=   0.0s
[CV] max_leaf_nodes=3 ................................................
[CV] ................................. max_leaf_nodes=3, total=   0.0s
[CV] max_leaf_nodes=4 ................................................
[CV] ................................. max_leaf_nodes=4, total=   0.0s
[CV] max_leaf_nodes=4 ................................................
[CV] ................................. max_leaf_nodes=4, total=   0.0s
[CV] max_leaf_nodes=4 ................................................
[CV] ................................. max_leaf_nodes=4, total=   0.0s
[CV] max_leaf_nodes=5 ................................................
[CV] ................................. max_leaf_nodes=5, total=   0.0s
[CV] max_leaf_nodes=5 ................................................
[CV] ................................. max_leaf_nodes=5, total=   0.0s
[CV] max_leaf_nodes=5 ................................................
[CV] ................................. max_leaf_nodes=5, total=   0.0s
[CV] max_leaf_nodes=6 ................................................
[CV] ................................. max_leaf_nodes=6, total=   0.0s
[CV] max_leaf_nodes=6 ................................................
[CV] ................................. max_leaf_nodes=6, total=   0.0s
[CV] max_leaf_nodes=6 ................................................
[CV] ................................. max_leaf_nodes=6, total=   0.0s
[CV] max_leaf_nodes=7 ................................................
[CV] ................................. max_leaf_nodes=7, total=   0.0s
[CV] max_leaf_nodes=7 ................................................
[CV] ................................. max_leaf_nodes=7, total=   0.0s
[CV] max_leaf_nodes=7 ................................................
[CV] ................................. max_leaf_nodes=7, total=   0.0s
[CV] max_leaf_nodes=8 ................................................
[CV] ................................. max_leaf_nodes=8, total=   0.0s
[CV] max_leaf_nodes=8 ................................................
[CV] ................................. max_leaf_nodes=8, total=   0.0s
[CV] max_leaf_nodes=8 ................................................
[CV] ................................. max_leaf_nodes=8, total=   0.0s
[CV] max_leaf_nodes=9 ................................................
[CV] ................................. max_leaf_nodes=9, total=   0.0s
[CV] max_leaf_nodes=9 ................................................
[CV] ................................. max_leaf_nodes=9, total=   0.0s
[CV] max_leaf_nodes=9 ................................................
[CV] ................................. max_leaf_nodes=9, total=   0.0s


[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.
[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=1)]: Done  24 out of  24 | elapsed:    0.0s finished

GridSearchCV(cv=3, error_score='raise-deprecating',
       estimator=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'),
       fit_params=None, iid='warn', n_jobs=None,
       param_grid={'max_leaf_nodes': [2, 3, 4, 5, 6, 7, 8, 9]},
       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',
       scoring=None, verbose=2)
print(gridSearchCV.best_params_)
decision_tree = gridSearchCV.best_estimator_
{'max_leaf_nodes': 4}
# 使用測試集對模型進行評估
from sklearn.metrics import accuracy_score
y_prab = gridSearchCV.predict(x_test)
print('accuracy_score:',accuracy_score(y_test,y_prab))
accuracy_score: 0.8455
# 可視化模型
from sklearn.tree import export_graphviz

export_graphviz(decision_tree,
               out_file='./tree.dot',
               rounded = True,
               filled = True)

生成tree.dot文件,然後使用dot命令\[dot -Tpng tree.dot -o decisontree_moons.png\]

5. 附錄

5.1 sklearn.tree.DecisionTreeClassifier類說明

5.1.1 DecsisionTreeClassifier類參數說明

  • criterion: 特徵選擇方式,string,(‘gini’ or ‘entropy’),default=’gini’
  • splitter: 每個結點的拆分策略,(‘best’ or ‘random’),string,default=’best’
  • max_depth: int,default=None
  • min_samples_split: int,float,default=2,分割前所需的最小樣本數
  • min_samples_leaf:
  • min_weight_fraction_leaf:
  • max_features:
  • random_state:
  • max_leaf_nodes:
  • min_impurity_decrease:
  • min_impurity_split:
  • class_weight:
  • presort: bool,default=False,對於小型數據集(幾千個以內)設置presort=True通過對數據預處理來加快訓練,但對於較大訓練集而言,可能會減慢訓練速度

5.1.2 DecisionTreeClassifier屬性說明

  • classes_:
  • feature_importances_:
  • max_features_:
  • n_classes_:
  • n_features_:
  • n_outputs_:
  • tree_:

5.2 GridSearchCV類說明

5.2.1 GridSearchCV參數說明

  • estimator: 估算器,繼承於BaseEstimator
  • param_grid: dict,鍵為參數名,值為該參數需要測試值選項
  • scoring: default=None
  • fit_params:
  • n_jobs: 設置要并行運行的作業數,取值為None或1,None表示1 job,1表示all processors,default=None
  • cv: 交叉驗證的策略數,None或integer,None表示默認3-fold, integer指定“(分層)KFold”中的摺疊數
  • verbose: 輸出日誌類型

5.2.2 GridSearchCV屬性說明

  • cv_results_: dict of numpy(masked) ndarray
  • best_estimator_:
  • best_score_: Mean cross-validated score of the best_estimator
  • best_params_:
  • best_index_: int,The index (of the “cv_results_“ arrays) which corresponds to the best candidate parameter setting
  • scorer_:
  • n_splits_: The number of cross-validation splits (folds/iterations)
  • refit_time: float

參考資料:

  • (1)
  • (2)
  • (3)李航

【精選推薦文章】

自行創業 缺乏曝光? 下一步"網站設計"幫您第一時間規劃公司的門面形象

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

可落地的DDD(5)-戰術設計

摘要

本篇是DDD的戰術篇,也就是關於領域事件、領域對象、聚合根、實體、值對象的討論。也是DDD系列的完結篇。
這一部分在我們團隊爭論最多的,也有很多月經貼,比如對資源庫的操作應該放在領域服務還是領域對象中。
聚合根應不應該暴露給外部,還是要轉成DTO。這些問題我們討論了大半年,最後大家基本達成了共識,在當前的業務規模下,
這些問題沒那麼重要,可東可西。不會對代碼的質量有啥大的影響。關於DDD的實踐,與團隊的水平、業務複雜度息息相關。我們的經驗並不一定就適用你們團隊。我將戰術篇的這麼多的內容放在了一篇文章中,並且大部分都是引用之前的討論、總結。
原因還是在於我內心深處並沒有覺得戰術篇的實踐給我們團隊帶來多麼大的改變。戰略篇的是我認為更重要的。

DDD系列文章斷斷續續也有十來篇了,主要是總結我們團隊落地過程遇到的問題和解決方案,算是DDD從學習到落地實踐的一個完整的閉環鏈路,希望對你有所啟發。當然這個過程受益最大的肯定是我本人。系統性的思考問題、總結問題、闡述問題是非常有助於提升個人思維能力,朋友們你們也可以嘗試一下。

建模

DDD的出現,是大家對於事務性編程,面向數據庫表編程的一個反思,明明軟件設計是一個面向對象的設計,需要考慮對象之間的繼承、多態、組合。
為什麼到實際編碼過程中成了過程性的編程,為什麼對象只有屬性沒有方法了,也就是失血模型。

關於這幾種編程的詳細介紹可以參考Martin的《Patterns of Enterprise Application Architecture》Page110

所以我個人覺得,DDD的作用有兩個,一個是面向業務的,幫助分析業務模型,進行業務建模。另外一個是面向解決域,即代碼落地。
即使用一個規範能夠反映對象之間的關係,即OO編程。

目前對DDD研究主要有以下類別

  1. 關於業務分析層面,如何進行概念層面的抽象和設計的方法論
  2. 關於服務劃分、代碼分層、職責定義的方法論
  3. DDD框架的討論,比如jdon

第3點基本上沒怎麼廣泛的討論。我認為未來也不會出現什麼牛逼的DDD框架能夠流行起來。DDD是一種建模方法,是針對不同的業務領域的,
在不同的團隊有不同的落地方案,是沒辦法靠一種框架來約束,來把一件不統一的事情來統一起來。就好比我們面向對象的設計針對問題域,抽象出來了
20多種設計模式。這些設計模式都是指導思想,你不能搞出一種框架,來約束大家使用某種設計模式就基於這種框架擴展,以此來達到代碼統一或者降低
編程難度的目的。

前面的文章主要是比較大的方面,比較適合做整體業務分析。也就是第一個點。今天主要討論第二點。

OO 編程

DDD的代碼分層、職責定義本質上就是OO編程。OO的三大基本要素就是繼承、多態、組合。這三個是深度抽象的結果。沒法指導具體的編程。
於是我們有了設計模式,前輩們針對問題域,總結除了24種設計模式,這樣遇到類似的問題時,我們可以使用對應的設計模式去解決問題。
而這些設計模式底層使用到還是繼承、多態、組合。

那有了設計模式了,為什麼還要DDD呢?為什麼很少看到開源軟件用DDD呢?
個人的理解DDD還是面向企業應用架構的,是在眾多不確定的業務,系統中提煉出來的一套規範,這樣必然是高度抽象的。而開源軟件大多是領域比較確定的,比如數據庫領域,中間件領域。解決這類問題的系統架構通常會更加複雜以及具有擴展性。

DDD的工程架構網上有很多,我在之前的文章也提到過,這裏不再贅述,看下老馬的這個,我覺得非常清晰的展現出來了職責分離
https://martinfowler.com/articles/microservice-testing/#conclusion-summary

我們重點看領域一層。
領域包含3點

領域服務

領域對象與領域服務

領域對象

敢於聚合根的激烈討論

領域事件

CQRS能解什麼問題

基礎設施層

為各層提供資源服務(如數據庫、緩存等),實現各層的解耦,降低外部資源變化對業務邏輯的影響。

總結

  • DDD中國
    http://ddd-china.com/look-back-2017.html 視頻去網站看

  • 美團的實踐
    https://tech.meituan.com/2017/12/22/ddd-in-practice.html

  • 盒馬的實踐
    https://zhuanlan.zhihu.com/p/42565478

  • cnblog博客園有很多.net DDD實踐的文章

    https://www.cnblogs.com/zhili/category/603514.html
    http://www.cnblogs.com/daxnet/archive/2012/12/27/2836372.html

  • jdon上面的系列
    https://www.jdon.com/ddd.html

  • 框架方面(個人覺得沒啥用,參考看看)

    rafy框架:http://zgynhqf.github.io/Rafy/articles/%E9%A2%86%E5%9F%9F%E5%AE%9E%E4%BD%93%E6%A1%86%E6%9E%B6.html

    jdon https://github.com/banq/jivejdon

  • 一些相關的書籍pdf上傳到百度網盤,需要的自取。

    鏈接: https://pan.baidu.com/s/1kGYk1dHbTAjBS4kd9s1VWw
    提取碼: 36w4

關注公眾號【方丈的寺院】,第一時間收到文章的更新,與方丈一起開始技術修行之路

【精選推薦文章】

智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

想知道網站建置、網站改版該如何進行嗎?將由專業工程師為您規劃客製化網頁設計及後台網頁設計

帶您來看台北網站建置台北網頁設計,各種案例分享

廣告預算用在刀口上,網站設計公司幫您達到更多曝光效益

kubernetes高級之創建只讀文件系統以及只讀asp.net core容器

系列目錄

使用docker創建只讀文件系統

容器化部署對應用的運維帶來了極大的方便,同時也帶來一些新的安全問題需要考慮.比如黑客入侵到容器內,對容器內的系統級別或者應用級別文件進行修改,會造成難以估量的損失.(比如修改hosts文件導致dns解析異常,修改web資源導致網站被嵌入廣告,後端邏輯被更改導致權限驗證失效等,由於是分佈式部署,哪些容器內的資源被修改也很難以發現).解決這個問題的辦法就是創建創建一個具有隻讀文件系統的容器.下面介紹使用docker run命令和docker compose來創建具有隻讀文件系統的容器.

使用docker run命令創建只讀文件系統

比如說要創建一個只讀文件系統的redis容器,可以執行以下命令

docker run --read-only redis

docker compose/swarm創建只讀文件系統

yaml編排文件示例如下

version: '3.3'
 
services:
  redis:
    image: redis:4.0.1-alpine
    networks:
      - myoverlay
    read_only: true

networks:
  myoverlay:

問題:創建只讀文件系統看起來很不錯,但是實際上往往會有各種各樣的問題,比如很多應用要寫temp文件或者寫日誌文件,如果對這樣的應用創建只讀容器則很可能導致應用無法正常啟動.對於需要往固定位置寫入日誌或者臨時文件的應用,可以掛載宿主機的存儲卷,雖然容器是只讀的,但是掛載的盤仍然是可讀寫的.

創建只讀的asp.net core容器

上面一節我們講到了創建容器只讀文件系統以增加安全性,以及如何解決需要寫入日誌文件或者臨時文件這樣常見的問題.我們嘗試創建一個只讀的asp.net應用時,即便不使用任何log組件(即不寫入日誌),仍然無法正常啟動鏡像.解決這個問題其實也非常簡單,只需要把環境變量COMPlus_EnableDiagnostics的值設置為0即可.

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 52193

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY . .
WORKDIR "/src"
RUN dotnet build "ReadOnlyTest.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "ReadOnlyTest.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
ENV DOTNET_RUNNING_IN_CONTAINER=true
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1

ENV COMPlus_EnableDiagnostics=0

COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ReadOnlyTest.dll"]

我們對這些環境變量進行簡單介紹

  • DOTNET_RUNNING_IN_CONTAINER值設置為true時則表示應用運行在容器內,方便我們獲取程序的運行環境,然後根據環境做出不同決策(比如單元測試的時候,可能要根據項目是運行在windows,linux或者linux容器做出不同的測試策略).當然,你也可以設置其它的環境變量來方便自己使用,比如你鍵名稱設置為IsRunningInDocker,但是DOTNET_RUNNING_IN_CONTAINER

  • DOTNET_CLI_TELEMETRY_OPTOUT是否輸出遙測信息,如果設置為1則是關閉,這樣dotnet.exe就不會向調試窗口輸出遙測信息.

  • COMPlus_EnableDiagnostics目前沒有找到太多關於這個參數的詳細信息,只是查閱資源發現這開啟這項配置可以創建只讀權限 aspnet 應用程序.

微軟官方基礎鏡像里還包含一項名稱叫作ASPNETCORE_VERSION的環境變量,我們可以直接讀取它,這樣使用公共的環境變量一來避免息手動設置和更新的麻煩,二來便於和社區交流(自己定義約束的只能用於內部團隊交流)

我們如何使用這些環境變量呢,其它可以在程序裏面暴露一個helper方法,比如

private bool InDocker { get { return Environment.GetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER") == "true";} }

這樣我們就可以根據實際的需求來使用它.

上面我們介紹了如何使用docker run命令以及docker-compose創建只讀文件系統.然而在kubernetes集群里,我們需要使用k8s的編排方法來創建只讀文件系統.那麼在k8s里如何創建只讀文件系統.其實這裏涉及到了另一個高級主題:那就是k8s的安全策略(Pod Security Policies)我們將在下一節介紹它.

【精選推薦文章】

如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!!

想要讓你的商品在網路上成為最夯、最多人討論的話題?

網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線

不管是台北網頁設計公司台中網頁設計公司,全省皆有專員為您服務

想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師"嚨底家"!!

中國科學家肯定谷歌量子霸權:明年我們或也能實現

  原標題:Chinese researchers hail Google’s quantum computing breakthrough, call for more funds to catch up to US

  網易科技訊 10 月 29 日消息,據《南華早報》報道,儘管美國競爭對手對谷歌在量子計算領域取得的突破表示懷疑,但中國科學家肯定了谷歌所聲稱的“量子霸權”。他們呼籲繼續在相關領域進行投資,以免落後於美國。

  上周三,谷歌在《自然》雜誌上發表的文章稱,其開發的 53 位量子計算機 Sycamore 在 200 秒內完成的特定問題計算需要花費世界上最快超級計算機 Summit 1 萬年的時間。谷歌聲稱通過 Sycamore 已經實現了“量子霸權”。

  中國科技大學教授、中國初創企業本源量子創始人兼首席科學家郭國平表示,這一成就具有“划時代意義”。

  “量子霸權是一個轉折點,它證明了量子計算機相對於傳統計算機的優越性,” 郭國平指出,“如果我們在通用量子計算的下一階段落後,這將意味着冷兵器和火槍之間的區別。”

  量子計算機採用了一種處理信息的新方法,理論上能夠比世界上現有最強大的超級計算機運算速度快幾個數量級。

  谷歌首席執行官桑達爾·皮查伊(Sundar Pichai)在另一篇文章中寫道:“隨着這一突破,我們現在離量子計算應用更近了一步,例如可以設計更高效的電池,用更少的能量製造化肥,以及找出可以製造有效藥物的分子。”

  當谷歌慶祝技術突破時,包括 IBM 和英特爾在內的競爭對手對這種說法表示懷疑。IBM 表示,谷歌沒有充分利用其 Summit 超級計算機的全部算力。如果採用理想的模擬方法,Summit 本可以在 2.5 天或更短時間內處理谷歌的計算。

  英特爾在一份聲明中表示,量子計算的實用性還有待進一步發展。

  不管每家公司的反應如何,郭國平說 200 秒到 2.5 天的巨大差距也足以讓谷歌稱王稱霸。

  該領域的其他中國研究人員指出,谷歌聲明的重要性不止是量子霸權本身,而更在於實驗中使用的新技術,比如用於連接量子比特的可調耦合器。

  “‘量子霸權’可以解決的問題目前還沒有任何實用價值,但谷歌已經證實其能夠維持 53 個量子比特的正常運算,”中國科學技術大學超導量子計算研究員黃浩亮指出,“可以預見的是,不久的將來可能會為機器學習等領域帶來突破和應用。”

  在全球技術競爭日益加劇之際,美國科技公司、中國大學和企業正競相開發量子計算機,谷歌也是其中之一。

  市場研究公司 Patinformatics 的數據显示,2017 年中國在通信和密碼設備方面申請的量子技術專利數量幾乎是美國的兩倍。然而,得益於 IBM、谷歌、微軟和其它公司的巨額投資,美國在量子計算領域的部分專利處於全球領先地位。

  黃浩亮承認,由於起步較晚,中國仍在努力趕超美國。他表示,由於量子技術整體仍處於早期發展階段,在現階段落後可能並不會產生重大影響。

  “但我們必須意識到,如果我們不加大支持和投資,差距可能會越來越大,”他表示。

  黃浩亮補充說,致力於 50 位量子計算技術的中國研究人員有望在明年年底實現“量子霸權”。

  根據 2016 年的一份政府報告,美國每年向該領域的研究投入 2 億美元。

  郭國平認為,中國在技術突破、人才引進等方面比歐美落後三到五年。他說,這一差距可能會擴大,因為該領域的大多數科學家都處於發表有關基礎研究論文的階段。他補充說,最重要的應用研究仍處於燒錢階段,沒有任何要實現商業化的跡象。

  近年來,中國一直在加大力度實現其量子領域的雄心壯志,但並沒有透露投資資金總額。根據 2016 年公布的“十三五”規劃,中國啟動了一個量子通信和計算的“大型項目”,目標是到 2030 年實現技術突破。

  2017 年,中國開始在安徽省合肥市建設世界上最大的量子研究實驗室,目標是開發量子計算機。量子信息科學國家實驗室耗資 100 億美元,計劃於 2020 年開放。

  包括百度、阿里巴巴、騰訊和華為在內的中國科技企業也招募了一些中國頂尖科學家,並建立了研發量子技術的實驗室。(辰辰)

  

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

帶您來了解什麼是 USB CONNECTOR  ?

為什麼 USB CONNECTOR 是電子產業重要的元件?

又掌控什麼技術要點? 帶您認識其相關發展及效能

除了物聯網和人工智能,還有這些新興技術得到雲計算加持


圖片來自“123RF”

  本文轉載自 IDC 圈,作者為圈圈,原標題《獲得雲計算支持的六大新興技術》。

  在過去的幾年中,得到雲計算支持的新興技術得到廣泛應用。在某些情況下,這些新技術是由雲計算供應商專門為雲計算而創建的。例如無服務器技術。在其他情況下,新興技術由於與雲計算之間的緊密聯繫而得到了發展。例如機器學習和人工智能。

  無論哪種情況,這些新興技術不僅正在改變雲計算,而且正在改變更多的企業計算領域——從零售到媒體再到製藥等行業。

  雲計算領域的新興技術

  這些新興技術(基於雲計算或與雲計算高度可互操作)為人們帶來了巨大的希望,但它們也增加了雲計算的複雜性。

  1. 容器

  2014 年春季,容器技術應運而生。而容器可以使軟件開發更快、更敏捷,業界對此充滿了好奇。容器並不是什麼淅事物,但是廣為人知的 Docker 使它們易於使用。

  與 Vmware 公司推出的虛擬機(必須容納整個操作系統)不同,容器將多個軟件包裝在一個軟件容器中,就像一個輕巧的“手提箱”。容器本身承載軟件,並且僅包含所需的基本要素(庫和配置),其文件在計算環境之間移動。

  這種新技術迅速得以採用。Rightscale 公司的“Cloud of State 2019”調查報告指出,66% 的企業採用了容器技術。同樣,60% 的公司採用了谷歌公司開發的容器管理系統 Kubernetes。

  考慮到雲計算環境的眾多元素,產生了各種各樣的新興技術不足為奇。

  2. 無服務器

  在 2014 年 AWS 公司推出無服務器架構之前,雲計算客戶猜測了他們需要配置並相應付費的計算資源級別。而使用無服務器時,AWS 公司只向客戶收取實際使用的費用。

  更重要的是,使用無服務器,雲計算提供商可以處理維護和擴展方面的基礎設施難題,從而使客戶(尤其是開發人員)更輕鬆、更快地構建其基於雲計算的系統。

  無服務器也被稱為功能即服務,允許應用程序在雲平台更快、更高效地運行。

  3. 微服務

  更新複雜的大型軟件可能是一個緩慢而繁瑣的過程。微服務在 2012 年開始風靡一時。

  微服務將笨重的整體應用程序分解為許多更小的、聯合的服務或“模塊”。它使用模塊化方法,由團隊根據需要更新模塊,獨立於整個龐大的應用程序(業內人士表示,這個模塊需要足夠小,這樣一個可以由規模較小的團隊就可以對其進行更新)。

  微服務可以持續交付最新更新的軟件。與無服務器一樣,它允許應用程序以雲計算時代所需的更快速度發展。

  4. DevOps

  說到持續交付,DevOps 的重點是持續集成(CI)/持續交付(CD)。DevOps 於 2012 年開始獲得強勁發展,它既是一種技術轉變,也是一種文化轉變。其目標是通過開發團隊和運營團隊這兩個世界觀截然不同的團隊相互交流來加速軟件開發。

  開發人員通常採用的是藝術家的思維,他們擅長創造新鮮事物。而運營團隊與其相反,通常更注重指標和電子錶格。但是,如果開發團隊和運營團隊可以一起工作(因此稱為“DevOps”),那麼最重要的軟件更新可以更快推出,從而獲得競爭優勢。

  5. 物聯網(IoT)

  在雲計算時代,似乎一切設備都可以連接到互聯網。從智能手錶到家用電器,從無人駕駛汽車到監控攝像頭。物聯網這個龐大的傳感器網絡將產生海量的數據。

  物聯網和雲計算通常都是獨立運行,但這兩種技術有着不可分割的聯繫。

  首先,正如許多新技術一樣,物聯網廠商不能從頭開始構建所有內容,因為太昂貴且太複雜。物聯網廠商因此決定採用雲計算技術。而每個主要的雲計算提供產都提供物聯網解決方案。

  此外,有關物聯網(也稱為“邊緣計算”)的關鍵問題是:將在哪裡處理所有數據?對於許多企業而言,其答案是“在我們的雲平台中”。由雲計算提供商的超大規模服務器提供支持的基於雲計算的數據分析可提供出色的數據處理能力。

  6. 人工智能

  人工智能技術在塑造未來將發揮巨大作用。憑藉其可以獨立於工作人員協助而學習的軟件的承諾,人工智能成為一款強大的工具,其巨大的潛力使所有其他工具相形見絀。

  同樣,當人工智能獨立於雲計算的存在時,人工智能對於企業來說是非常複雜的。因此,企業希望雲計算提供商提供他們的人工智能解決方案,其中包括機器學習和深度學習工具。

  在雲計算的早期發展中,雲計算提供基本計算和存儲的能力是偉大的民主化者。雲計算提供商為中小型公司提供可以租用的數據中心,從而與大型廠商開展競爭。隨着雲計算的成熟,基於雲計算的人工智能使得一些具有遠見卓識的中小型公司可以實現自己的願景,就像財力雄厚的大公司一樣。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

平板收購,iphone手機收購,二手筆電回收,二手iphone收購-全台皆可收購

收購3c,收購IPHONE,收購蘋果電腦-詳細收購流程一覽表

高價3c回收,收購空拍機,收購鏡頭,收購 MACBOOK-更多收購平台討論專區

3c收購,鏡頭 收購有可能以全新價回收嗎?

賣IPHONE,iPhone回收,舊換新!教你怎麼賣才划算?