這幾款10萬級車型投訴率最低,最可靠!竟然沒有日系

吉利遠景指導價:5。39-6。79萬推薦車型:2017款1。5L自動幸福版10月份銷量:15721輛10月份投訴量:4單吉利汽車無論是轎車還是SUV,都對汽車銷量市場貢獻了不少的成績,SUV有博越,遠景SUV和帝豪GS,轎車則有博瑞,帝豪GL和今天介紹的這款遠景,在上個月賣出了1。

根據中國汽車工業協會提供的數據表示,在10月份全國轎車的銷售量達到了117.05萬輛,車主朋友們對轎車的有效投訴達到2538宗,在投訴案例中,大多數朋友投訴的內容為發動機功率不足,車內異味以及變速箱異響的問題。而今天想為大家介紹的這幾款,確實是經過了後市場的考驗,投訴量非常少的質量可靠性轎車,不妨參考參考。

雪佛蘭科沃茲

指導價:7.99-10.99萬

推薦車型:2016款 1.5L自動欣悅版

10月份銷量:13836輛

10月份投訴量:0

在科沃茲還沒正式亮相之前,就有不少的粉絲在後台問這款車如何,而該車推出至今已經有幾個月,論質量論實力,在10萬元代步家轎中,一直保持着不錯的成績,這次通過數據來看,在9月份10月份後市場依然還沒收到科沃茲車主的投訴,這其實就是一個很好的證明了。

科沃茲外觀採用雪佛蘭家族式的雙層前格柵,燈組內部有點綴鍍鉻飾條和全新的雙L形LED光帶式日間行車燈,全系標配,內飾採用傳統飛翼式座艙設計,同時座椅提供更加出色的側向支撐和包裹性。動力上全系採用1.5L自然吸氣發動機,搭配5速手動和6速手自一體變速器,推薦的這個自動欣悅版,標配胎壓監測,ESp車身穩定,上坡輔助,天窗以及發動機啟停裝置,應該有的配置沒有差。

全力加速時轉速爬升得比較慢,大約在2500轉左右,爆發力只能說一般般,不過在加速的時候降擋相當果斷,方向盤力度沉穩,平時在道路上做併線動作也蠻幹脆利索,但是整體的駕駛感受上還是比本田鋒范差點,百公里平均油耗7L。

東風悅達起亞K2

指導價: 7.29-10.39萬

推薦車型: 2017款 三廂 1.4L AT GLS

10月份銷量:16882

10月份投訴量:3

在網絡上曾傳聞着這樣一篇文章“十大最不安全車輛”,在這個由美國評定出來的車型當中,就屬起亞K2首當其沖,雖然在這個等級上舊款起亞K2由於自身問題慘入榜單,但是相信最近剛上市的全新2017款K2能夠帶給大家不一樣的感覺。

全新的起亞K2前臉變化很大,整個車頭設計都讓人煥然一新,虎嘯式格柵面積更小,側面也比舊款顯得更加修長,沒有那麼笨重,車尾則加入了貫穿式尾燈,識別程度非常之高。內飾風格也是全新設計,中控彩色屏幕支持蘋果Carplay和百度Carlife功能,還有倒車雷達和影像,這可能是最實用的功能了,其他像ESp車身穩定和胎壓監測上坡輔助等,都變成後期加裝了,選起亞K2,確實會面臨這個尷尬的問題。

動力上提供1.4L和1.6L兩種排量的自然吸氣發動機,傳統的4AT變速器遭捨棄,升級為6速手自一體和6速手動擋變速器,試駕感受上油門踏板初段有些遲緩,需要捨得給油地深踩才會感覺到動力的提升,懸架偏向於舒適,但過減速帶感覺還是比較明顯。

吉利遠景

指導價:5.39-6.79萬

推薦車型:2017款1.5L自動幸福版

10月份銷量:15721輛

10月份投訴量:4單

吉利汽車無論是轎車還是SUV,都對汽車銷量市場貢獻了不少的成績,SUV有博越,遠景SUV和帝豪GS,轎車則有博瑞,帝豪GL和今天介紹的這款遠景,在上個月賣出了1.5多萬輛的成績,只接到4單車主用戶的投訴,這個成績還是蠻可以的。

在外觀上,2017款對前臉進氣格柵造型做了小調整,統一了家族式風格的“回”字形造型,更加時尚,內飾設計變化不大,這次該款主要是配置升級了一點,配置雖然沒有ESp車身穩定(本田飛度大部分車型也沒有),但其他配置如后倒車雷達及影像,前後攝像頭,定速巡航等功能,在這款6.69萬的1.5L自動擋版本上看到,就已經非常奇迹了,感覺賺到了。

該車不僅配備1.5L自然吸氣,如果對動力需求更大可以入手1.3T渦輪增壓版本,不過該版本沒有匹配自動變速器,比較可惜,整體車內儲物空間還是蠻多的,這輛車,價格便宜是最大的賣點,且賣出去后,用戶投訴量也非常少,可以考慮。

大眾捷達

指導價:7.99-12.08萬

推薦車型:2015款 質惠版1.6L自動舒適型

10月份銷量:29637輛

10月份投訴量:6單

捷達車型相信大家都相當熟悉了,它在我國存在的年份已經相當之久,雖然很少在網上看到它的宣傳廣告,但它一直在我國的銷量都非常好,10月份總共賣出的車輛就直逼3萬大軍,收到的投訴量也只有6單,如果真要將這4台車型來列個投訴銷量比的話,無疑大眾捷達得到的分數是最高的。

2015款的外觀還是比較圓潤中庸,內飾風格還是那麼簡樸老成,大眾標準內飾設計風格,沒有多大可以描述的地方,針對捷達來說,有着多種發動機排量可以選擇,有着1.4L和1.6L的自然吸氣版本,同時也有1.4T渦輪增壓的大動力版本,根據不同排量的發動機,匹配5速手動,6速自動和7速雙離合變速器,配置上基本不標配ESp,大部分為選裝情況。

可能大家買捷達,就是衝著德系技術,且捷達車耐用好開的特性吧,配置其實並不是絕大多數人考慮的地方,品牌效應早已超過了其他,在試駕過程中深加速時發動機噪音大,底盤比較穩,質感不錯,如今2017款新捷達已經亮相,期待上市后的市場反應。

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

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

開創城市SUV新世代 全新一代Tiguan上市

領先同級的可自定義式全液晶儀錶(Active Info Display)通過與HUD数字抬頭显示與8英寸中控觸摸屏幕的三屏互動,使駕駛者輕鬆便捷地獲取各類行駛信息。第二代MIB車載信息娛樂系統集娛樂和車載導航功能於一身,配備Mp3和WMA功能的CD播放器隨時隨地營造出優越的多媒體氛圍。

2016年11月25日,大眾進口汽車以 “踐行智遠 盡在無限” 為主題,在深圳舉行盛大發布活動,宣布全新一代Tiguan正式登陸中國市場。作為大眾汽車集團基於MQB平台打造的第一款SUV車型,全新一代Tiguan將多種“優質基因”重新組合升級,以創新科技開創城市SUV新世代。

大眾進口汽車向中國市場引進了4款全新一代Tiguan車型,包括:280 TSI精英型:售價為26.28萬元;330 TSI創睿型:售價為31.68萬元; 330 TSI高配型:售價為34.58萬元,以及富有運動風格的380 TSI R-Line:售價為39.18萬元。

全新一代Tiguan是大眾進口汽車前瞻中國SUV市場消費升級趨勢,為中國新生代精英引進的一款全新智能互聯、科技創新的城市SUV,保持了原汁原味的德國SUV品質,其所配備的前衛科技和安全裝備,足以輕鬆應對多種路況的挑戰。大眾進口汽車總經理施銳德先生(Mr. Axel Schroeder)表示:“全新一代Tiguan將成為該細分市場的新標杆和引領者,無論是它最新的設計語言、同級罕有的性能、充滿樂趣的操控,還是豐富的高科技互聯裝備,都體現了大眾汽車最新的技術和工藝,也是我們不斷致力於將最創新、最純正、最能代表大眾汽車造車理念的產品第一時間帶到中國的又一力作。”大眾汽車最新的設計語言在全新一代Tiguan上得以呈現。車身應用了雙特徵線的設計,大量豐富的雙直線線條,配合更加細膩有力的切角,使得整車形態更顯簡約立體,線條凌厲富有力量美感。搭配艙蓋上銳利的“V”字型線條與車側兩條剛勁有力的特徵線相互呼應,形成了全新一代Tiguan獨特的“線條對話”效應,令車身造型更加飽滿有力。2016年,全新一代Tiguan獲得了有“產品設計界奧斯卡”之稱的“iF”設計大獎。

全新一代Tiguan為中國消費者提供了3款動力總成,包括一款1.4 TSI發動機(110千瓦)搭載6速DSG變速箱,兩款2.0 TSI發動機(132千瓦及162千瓦)搭載7速DSG變速箱。所配備的7速DSG為大眾汽車全新一代採用濕式雙離合系統變速箱,扭矩顯著提升。大眾汽車知名的4MOTION®四驅系統,在全新一代Tiguan上進一步升級,配備了全新的Haldex®第五代電控多片離合器中央差速鎖,根據不同路況和天氣合理分配動力,令加速更快、過彎更穩、濕地不滑、越野更輕鬆。全新加入的具備主動控制的駕駛模式選擇功能也成為全新一代Tiguan的重要亮點之一。該系統搭配了DCC動態底盤控制系統,共有“公路”、“越野”、“個性越野”、“雪地”4種駕駛模式選擇。而公路模式還可有 “經濟”、“標準”、“運動”、“個性化+舒適” 4+1種擴展駕駛模式可選,實現了在速度激情、靜謐舒適、經濟省油、個性釋放之間的隨心切換,面對公路、山路、雪地、泥濘等各種路況游刃有餘。

全新一代Tiguan更大的亮點是其無處不在、跨越同級的智能科技與互聯功能,豐富的駕駛輔助系統。包括:預碰撞安全系統、低速緊急制動系統、盲點監測/併線輔助系統、後方交通預警系統、車道保持系統、第三代泊車輔助系統、動態照明輔助系統、大燈隨動轉向功能以及疲勞警示系統等,有效提高駕駛安全,為駕乘人員提供360度全方位安全保護。

人機交互和智能互聯的應用令其如虎添翼。領先同級的可自定義式全液晶儀錶(Active Info Display)通過與HUD数字抬頭显示與8英寸中控觸摸屏幕的三屏互動,使駕駛者輕鬆便捷地獲取各類行駛信息。第二代MIB車載信息娛樂系統集娛樂和車載導航功能於一身,配備Mp3和WMA功能的CD播放器隨時隨地營造出優越的多媒體氛圍。該系統可以同時支持兩部藍牙電話連接,並可個性化存儲或更改無線電台標識。使用導航功能時,可显示實時交通擁堵路況信息。大眾汽車車聯網(Car-Net)與手機映射功能(App-Connect)的結合,實現了人、車、智能設備的互聯互通。大眾汽車車聯網通過車載導航Discover Media、三鍵模塊、大眾汽車車聯網手機App、大眾汽車車聯網門戶網站以及第三方App,來實現大眾汽車車聯網的各項服務。車主只需將自己的智能手機和大眾汽車車聯網App註冊綁定,就可以使用大眾汽車車聯網的各項功能。駕駛者可隨時通過一鍵觸發獲得“呼叫服務”,可提供被盜車輛追蹤、出行服務、道路救援、緊急呼叫等服務;“在線信息服務”可獲得新聞、天氣、實時路況、停車場服務等實用信息;而通過“遠程監控功能”可以遠程獲得車輛信息(燈光、車門車窗、泊車位置等),並可實現遠程控制,如:遠程開關車門、設定車速限制和行駛範圍的監控等。手機映射功能可以將智能手機上的App應用程序,如地圖、音樂、短信等功能在中控屏上显示,並實現操作。全新一代Tiguan還針對中國市場普及應用的App(比如:微信)開發了一些特有的功能。用戶將微信賬號與大眾汽車車聯網帳號進行綁定,即可通過微信將好友分享的約會地點或興趣點位置信息傳送給車載導航系統,設置為車載導航的目的地,免去了手動輸入的麻煩,駕駛者可以通過車載導航系統進行導航駕駛。導航駕駛操作變得更為輕鬆、便利和安全。

全新一代Tiguan显示出大眾汽車對創新永不停息的追求,“智能”、“互聯”已成為全新一代Tiguan重要的標籤。而這些創新的理念也同樣在當晚的發布活動上得以體現。選擇深圳這一走在中國創新科技前沿的創意之都舉辦發布會,與全新一代Tiguan引領科技創新潮流的形象十分貼切。“踐行智遠 盡在無限”的發布會主題則是大眾汽車對創新不懈努力的最好詮釋。整個發布會現場氛圍充滿了科技感,為到場嘉賓帶來了一種全新的感受。嘉賓入場採用了人臉識別科技進行認證,準確可靠,高效便利。現場還布置了多處互動體驗區,利用各種科技感十足的互動手段,通過有趣且富於體驗感的方式呈現了全新一代Tiguan上應用的各種創新科技,使在場嘉賓感覺新鮮且印象深刻;更重要的是,使他們對全新一代Tiugan有了更加深入的了解。發布會還邀請了著名信息管理專家、科技作家塗子沛先生到場,與在場嘉賓分享他關於科技創新、前瞻趨勢的觀點;並和施銳德先生現場互動交流。施銳德先生則通過分享眾多創新智能科技在全新一代Tiguan上的應用,闡釋了大眾汽車不斷創新,致力於成為趨勢引導者的實力和追求。

值得一提的是,此次全新一代Tiguan的發布會創新地使用了VR互動方式,將全新一代Tiguan的動感外觀、靈活駕控和智能科技以最生動的形式進行展現,使在場嘉賓得到了印象深刻、極富真實感的體驗。大眾進口汽車在未來將引入類似的VR體驗至實體經銷商店,消費者可通過這種方式全面體驗產品的各個亮點,感受全新一代Tiguan所帶來的炫酷體驗。

作為2016年SUV市場備受關注的重磅新車,全新一代Tiguan憑藉引領趨勢的動感外觀、獨一無二的駕駛性能、超越同級的智慧科技與高效快捷的互聯科技,在德國製造和原裝進口品質的加持下,必將刷新眾多消費者對城市SUV的衡量標準,開創全新的城市SUV新世代。

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

【其他文章推薦】

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

它或許是2017最值得期待的自主品牌SUV

0T的柴油和汽油兩種動力模塊,但是具體的賬面參數和傳動系統的搭載暫且沒有消息。並且為了適應不同的城市訴求,上汽大通D90還將會推出純電動、插電式魂動、燃料電池助力等等多種的驅動方式。編者有話說:上汽大通D90的概念車外觀確實很漂亮,但是小編並不希望實車下地的時候上汽大通會重蹈長安CS95的覆轍。

2016年年底中國自主品牌汽車市場最為驚艷的車型,給廣汽傳祺GS8投上一票相信沒有什麼人會反對,漂亮霸氣的外觀造型,再配合上正式上市后相對親民的售價,讓很大一部分還在躊躇着合資緊湊型SUV的消費者轉向了國產的陣營。然而在剛剛結束的廣州車展上,還有一台SUV車型引起了小編的注意,如無意外,它或許是廣汽傳祺GS8的直接競爭對手——上汽大通D90。

同樣的驚艷,不同的性格

上汽大通D90現在僅僅是處於概念車階段,曝光於今年早些時候的北京車展,整體風格使用了大量的凌厲線條勾勒出運動感,與廣汽傳祺GS8的穩重中略帶粗獷的性格不同,上汽大通D90顯得更加的精緻而且富有活力。

內飾層面的設計顯得十分后現代,畢竟是一款概念車,所以參考價值在小編個人看來並不算太大,但是根據官方透露的消息,該車的配置會十分豐富,6安全氣囊,主動安全系統,自適應巡航等等配置一應俱全。

動力層面據悉會採用2.0T的柴油和汽油兩種動力模塊,但是具體的賬面參數和傳動系統的搭載暫且沒有消息。並且為了適應不同的城市訴求,上汽大通D90還將會推出純電動、插電式魂動、燃料電池助力等等多種的驅動方式。

編者有話說:

上汽大通D90的概念車外觀確實很漂亮,但是小編並不希望實車下地的時候上汽大通會重蹈長安CS95的覆轍。CS95的概念車發布的時候可謂是震驚中外,但是量產版本公布之時卻顯得有些平庸。

作為已經上市的車型,廣汽傳祺GS8可謂是樹立自主品牌中大型SUV全新的標杆,而上汽大通D90的售價預計也是在20萬元左右,同樣為多座位的布局方式,所以可以很自然的聯想到上汽大通D90與廣汽傳祺GS8形成的直接競爭關係,據悉上汽大通D90的量產車型在2017年9月就將正式上市,希望屆時所出現的車型是一款與概念車相比出入不那麼大的高顏值SUV。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

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

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

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

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

※回頭車貨運收費標準

CHR還沒出生,繽智又多一個對手?全新小型SUV專利圖曝光

88-18。98萬本田XR-V指導價格:12。78-16。28萬豐田C-HR指導價格:暫

SUV產品的豐富並不是僅僅存在自主品牌當中,自本田推出繽智和XRV以來,豐田CHR的曝光量越來越大,而作為日系品牌在中國銷量也非常出色的日產,進來曝光了一款國內的小型SUV專利圖,這或許意味着,日產品牌旗下的小型SUV誕生之日就在不久的將來。

日產先期在2014年巴西聖保羅車展已經曝光一款小型SUV概念車——Nissan-Kicks,據悉在今年年底就會量產在拉丁美洲銷售,根據日產的計劃,這款小型SUV有投放全球計劃的構想,從曝光的專利圖上看,未來國產的日產品牌小型SUV非常有可能與Kicks衍生於同一平台。

Nissan—Kicks的外觀造型顯得非常精緻,四個輪拱處都使用了肌肉紋理,彰顯出了一定的力量感,而整車包圍裙邊顯得運動風格十足,色差較大的車身與車頂的差異讓kicks看上去更顯得年輕動感。

我們不難從專利圖上看出這款全新的日產小型SUV與kicks的相似程度極高,前臉造型較為犀利,整車線條同樣是以緊湊動感為主要設計語言,關於該車的動力、配置、等等消息暫時還沒有獲得較為確切的證據,但從定位上我們或許可以猜測其將會搭載與逍客相同的1.2T發動機。

競品車型:

本田繽智

指導價格:12.88-18.98萬

本田XR-V

指導價格:12.78-16.28萬

豐田C-HR

指導價格:暫本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

※教你寫出一流的銷售文案?

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

都是13萬能買到 這兩款大眾轎車誰更好

乘坐感受速騰雖然用上了后獨立懸架,但是舒適性方面還是有所欠缺,關鍵是當顛簸比較多的時候,會發現懸架有點處理不過來,餘震較多。但是有一點比較好,速騰的底盤滲進車廂內的細碎震動不多。另外有一點值得表揚的就是,後排空間較大且座墊的長度足夠。

前言速騰和朗逸可以說是大眾家族中的兩張銷量王牌,那麼在14萬左右想買這兩者中的一輛,該如何來選呢,下面編者我就來對比一下。

一汽-大眾-速騰

2017款 230TSI 自動舒適型

指導價:16.08萬

優惠幅度:3萬元左右(僅供參考)

上汽大眾-朗逸

2015款 230TSI DSG舒適版

指導價:14.69萬

優惠幅度:1.3萬左右(僅供參考)

駕駛感受

兩輛車的動力總成都一樣,均為1.4T發動機+7速DSG變速箱,最大輸出131馬力和225牛米。略有區別的是最大扭矩轉速,朗逸在1400轉便爆發,而速騰要到1500轉,不過兩者都在3500轉以後開始衰減。

懸架的選用上兩者也有很大差別,速騰后懸架採用的是多連桿獨立懸架,而朗逸用的是扭力梁式非獨立懸架。儘管如此,一切還是要從實際表現出發。

速騰的發動機艙

速騰的動力還是很充足的,無論平時超車,還是高速上開,都不會覺得車子有乏力的情況。變速箱的換擋動作也很平順,不會給駕駛員帶來什麼滋擾。然而,懸架總體來說還是偏軟,高速過彎時的側傾會比較大。轉向則略微有點重,特別是在不停挪車時,轉向的力度有點讓人受不了。

朗逸的發動機艙

朗逸的駕駛感受其實也和速騰大同小異,1.4T的動力隨傳隨到,不拖泥帶水。懸架抑制側傾的能力依舊有限,不算很出色。轉向上會比速騰來得略輕一點點。

乘坐感受

速騰雖然用上了后獨立懸架,但是舒適性方面還是有所欠缺,關鍵是當顛簸比較多的時候,會發現懸架有點處理不過來,餘震較多。但是有一點比較好,速騰的底盤滲進車廂內的細碎震動不多。另外有一點值得表揚的就是,後排空間較大且座墊的長度足夠。

朗逸的表現就沒有速騰那麼好了,首先座墊偏短,乘客的大腿大部分位置得不到有效承托。不過,座椅靠背角度較斜,坐進去感覺還是挺放鬆。其次就是,從底盤傳入車廂內的細碎震動較多,過大坑時會顯得較為單薄,幸好在過小顛簸時懂得如何去以柔克剛。

配置對比

這個環節可以說是兩者差別最大的,因為速騰的優惠幅度更高,所以配置會更為豐富。不僅多了無鑰匙啟動與進入,還多了不少配置,詳情可看下錶。

油耗對比

由於動力總成完全一致,且車身尺寸差距不大,所以兩者的油耗很相近。速騰的百公里綜合油耗為7.3L,而朗逸則為7.2L。

編者總結:

其實,速騰與朗逸這兩台車的調性是很相似的,都是偏居家的風格,而速騰在舒適性與配置上會優於朗逸。但是,每次看到速騰,我腦海中都閃現出一句歌詞“有多少愛可以重來”,曾經的速騰斷軸門讓大家都傷透了心。儘管現在速騰已更換了后獨立懸架,但是心中的芥蒂是否就此放下呢?如果已經放下了,那速騰確是一款適合家用的車。如若依舊介懷,就不必買輛車讓自己提心吊膽。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※想知道最厲害的網頁設計公司"嚨底家"!

※別再煩惱如何寫文案,掌握八大原則!

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※回頭車貨運收費標準

台中搬家公司費用怎麼算?

3分鐘了解清楚持續集成、持續交付、持續部署

近些年來,持續集成、持續交付以及持續部署這幾個熱詞總是在大家的眼前晃來晃去!在招聘信息和面試過程中也會經常提及!在這裏我就用三分鐘時間來帶大家了解他們!

 

1. 持續集成(CI:Continuous Integration)

持續集成強調開發人員提交了新代碼之後,立刻進行構建然後進行單元測試。根據測試結果,我們可以確定新代碼和原有代碼能否正確地集成在一起。

注意:這裏的測試重點是指開發人員進行的代碼級別測試!

  

2. 持續交付(CD:Continuous Delivery)

 

持續交付在持續集成的基礎上,將集成后的代碼部署到更貼近真實運行環境的類生產環境中。如果測試沒有問題,可以繼續手動部署到生產環境中。

注意:這裏的測試重點是指測試人員進行的產品級別的測試!往往在這個測試過程中普遍都會引入測試腳本進行自動化回歸測試,主要是進行接口測試和UI測試,

當然部分公司也會引入安全測試和性能測試。持續交付能夠以較短地周期完成需求的小粒度頻繁交付。

頻繁的交付周期帶來了更迅速的對軟件的反饋,並且在這個過程中,各個角色密切協作,相比於傳統的瀑布式軟件團隊更少浪費資源。

 

 

3. 持續部署(CD:Continuous Deployment)

 

持續部署則是在持續交付的基礎上,把部署到生產環境的過程自動化。整個過程無需人工參与!

 

4. 總結

簡單地說:

  • 持續集成主要是在開發範圍,包括:構建>單元測試;
  • 持續交付涉及開發、測試、運維合作,包括:構建>單元測試>測試環境部署>測試(不涉及生產環境的自動化部署)
  • 持續部署是在持續交付的基礎上的延伸:包括:構建>單元測試>測試環境部署>測試>生產環境部署>生產環境測試(全流程自動化)

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

【其他文章推薦】

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

※別再煩惱如何寫文案,掌握八大原則!

※教你寫出一流的銷售文案?

※超省錢租車方案

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

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※回頭車貨運收費標準

除了FastJson,你也應該了解一下Jackson(一)

在上月末的時候收到一條關於fastjson安全漏洞的消息,突然想到先前好像已經有好多次這樣的事件了(在fastjson上面)。關於安全方面,雖然中槍的機率微小,但是在這個信息越來越複雜的時代,安全性也變得越來越重要,就像DevSecOps的誕生,在軟件交付的整個價值流中我們也需要注重安全這方面。當然我們現在不談關於FastJson的優劣,因為我們本文的目標是讓大家了解和掌握Jackson。

概覽

Jackson是一個非常流行和高效的基於Java的庫,它可以序列化java對象或將java對象映射到JSON,反之亦然。當然除了Jackson,在Java中同類型的優秀的庫也有很多,比如:

  • Gson
  • json-io
  • Genson

關於哪一個最好或者哪一個最流行,沒有明確的答案。技術的種類繁多,每個人對與不同技術的態度也不一樣。言歸正傳,文章主要還是討論Jackson的。本文主要講解我們處理Json中最常見的兩個操作:

  • 將Java對象序列化為JSON
  • JSON字符串反序列化為Java對象

引入依賴

由於在Spring/SpringBoot中很多組件已經自帶了Jackson庫,所以很多情況下不需要手動引入Jackson的依賴。

手動引入依賴:

<dependency> 
  <groupId>com.fasterxml.jackson.core</groupId> 
  <artifactId>jackson-databind</artifactId> 
  <version>2.9.8</version>
</dependency>

這個依賴關係還將傳遞地向類路徑添加以下庫:

  1. jackson-annotations-2.9.8.jar
  2. jackson-core-2.9.8.jar
  3. jackson-databind-2.9.8.jar

JavaObject to Json

ObjectMapper

ObjectMapper是一個映射器(或數據綁定器或編解碼器),提供了在Java對象(bean的實例)和JSON之間進行轉換的功能。

首先定義一個簡單的Java類

public class Car {
    private String color;
    private String type;
    // standard getters setters
}

將Java對象轉換成Json

我們使用ObjectMapper的writeValue相關Api來對Java對象進行序列化操作

ObjectMapper objectMapper = new ObjectMapper();
Car car = new Car("blue","c1");
System.out.println(objectMapper.writeValueAsString(car));

此時輸出

{"color":"blue","type":"c1"}

更多

ObjectMapper的writeValue相關Api還提供了很多便利的Json序列化操作方法,比如:將對象序列化成Json字節數組的writeValueAsBytes()方法、自定義輸出源的writeValue()方法…

ObjectMapper objectMapper = new ObjectMapper();
Car car = new Car("blue","c1");
objectMapper.writeValue(new File("./xxx.txt"),car);

運行上述代碼,Java對象的序列化Json將被輸出到xxx.txt文件。

Json to JavaObject

將Json String轉換成Java Object

ObjectMapper objectMapper = new ObjectMapper();
String json = "{\"color\":\"blue\",\"type\":\"c1\"}";
Car car = objectMapper.readValue(json, Car.class);

readValue()方法也接受其他形式的輸入,比如包含JSON字符串的文件:

ObjectMapper objectMapper = new ObjectMapper();
Car car = objectMapper.readValue(new File("./xxx.txt"), Car.class);
System.out.println(car);

JSON to Jackson JsonNode

JsonNode

一個JSON可以被解析成一個JsonNode對象,用來從一個特定的節點檢索數據.

使用readTree()方法,我們可以將Json字符串轉換成JsonNode

ObjectMapper objectMapper = new ObjectMapper();
String json = "{ \"color\" : \"Black\", \"type\" : \"FIAT\" }";
JsonNode jsonNode = objectMapper.readTree(json);
System.out.println(jsonNode.findValue("type").asText());
// 打印出“FAIT”

JSONArrayString to JavaList

ObjectMapper objectMapper = new ObjectMapper();
String jsonCarArray =
    "[{ \"color\" : \"Black\", \"type\" : \"BMW\" }, { \"color\" : 3. \"Red\", \"type\" : \"FIAT\" }]";
List<Car> listCar = objectMapper.readValue(jsonCarArray, new TypeReference<List<Car>>() {});

JSONString to JavaMap

ObjectMapper objectMapper = new ObjectMapper();
String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";
Map<String, Object> map = objectMapper.readValue(json, new TypeReference<Map<String, Object>>() {
});

Jackson庫最大的優點之一是高度可定製的序列化和反序列化過程。接下來將介紹一些高級特性,其中輸入或輸出JSON響應可以與生成或使用響應的對象不同。

配置序列化和反序列化特性

String jsonString = "{ \"color\" : \"Black\", \"type\" : \"Fiat\", \"year\" :\"1970\" }";

假設使用如上json字符串來反序列化成Java對象,按照默認解析過程將導致UnrecognizedPropertyException異常,因為其中存在Car類中未包含的新字段year。

通過配置序列化和反序列化特性來解決此問題:

ObjectMapper objectMapper = new ObjectMapper();
String jsonString = "{ \"color\" : \"Black\", \"type\" : \"Fiat\", \"year\" :\"1970\" }";
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
Car car = objectMapper.readValue(jsonString, Car.class);

如上,我們在ObjectMapper中配置了DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES=false,從而實現忽略新的字段。

類似:另一個選項FAIL_ON_NULL_FOR_PRIMITIVES,它定義了是否允許原始值的空值;FAIL_ON_NUMBERS_FOR_ENUM控制是否允許enum值被序列化/反序列化為数字……

自定義序列化器或反序列化器

自定義序列化器

public static class CustomCarSerializer extends StdSerializer<Car> {
    public CustomCarSerializer() {
        this(null);
    }

    public CustomCarSerializer(Class<Car> t) {
        super(t);
    }

    @Override
    public void serialize(Car car, JsonGenerator jsonGenerator, SerializerProvider serializer) throws IOException {
        jsonGenerator.writeStartObject();
        jsonGenerator.writeStringField("car_brand", car.getType());
        jsonGenerator.writeEndObject();
    }
}

如上,通過繼承StdSerializer類,我們實現了一個自定義的序列化器。

使用自定義的序列化器:

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule("CustomCarSerializer", new Version(1, 0, 0, null, null, null));
module.addSerializer(Car.class, new CustomCarSerializer());
mapper.registerModule(module);
Car car = new Car("yellow", "enault");
System.out.println(mapper.writeValueAsString(car));
//輸出{"car_brand":"enault"}

自定義反序列化器

public static class CustomCarDeserializer extends StdDeserializer<Car> {

        public CustomCarDeserializer() {
            this(null);
        }

        protected CustomCarDeserializer(Class<?> vc) {
            super(vc);
        }

        @Override
        public Car deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
            Car car = new Car();
            ObjectCodec codec = p.getCodec();
            JsonNode node = codec.readTree(p);
            // try catch block
            JsonNode colorNode = node.get("color");
            String color = colorNode.asText();
            car.setColor(color);
            return car;
        }
    }

如上,通過繼承StdDeserializer類,我們實現了一個自定義的序列化器。

使用自定義的反序列化器:

String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\"}";
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule("CustomCarDeserializer", new Version(1, 0, 0, null, null, null));
module.addDeserializer(Car.class, new CustomCarDeserializer());
mapper.registerModule(module);
Car car = mapper.readValue(json, Car.class);
//此時的car {color='Black', type='null'}

處理時間格式

️:此處僅展示對於Java8的LocalDate&LocalDateTime的處理

首先創建一個帶日期時間字段的Car類

public class Car {
    private String color;
    private String type;
  	@JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDateTime produceTime;
    // standard getters setters
}

自定義時間格式處理

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.findAndRegisterModules();
Car car = new Car().setColor("blue").setType("c1").setProduceTime(LocalDateTime.now());
String carAsString = objectMapper.writeValueAsString(car);
System.out.println(carAsString);
//此時輸出:{"color":"blue","type":"c1","produceTime":"2020-06-06"}

處理集合

DeserializationFeature類提供的另一個小但有用的特性是能夠從JSON數組響應生成我們想要的集合類型。

String jsonCarArray = "[{ \"color\" : \"Black\", \"type\" : \"BMW\"}, { \"color\" : \"Red\", \"type\" : \"FIAT\"}]";
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.USE_JAVA_ARRAY_FOR_JSON_ARRAY, true);
Car[] cars = objectMapper.readValue(jsonCarArray, Car[].class);

如上,我們將一個JsonArray字符串轉換成了對象數組。

我們也可以將其轉換成集合:

String jsonCarArray = "[{ \"color\" : \"Black\", \"type\" : \"BMW\"}, { \"color\" : \"Red\", \"type\" : \"FIAT\"}]";
ObjectMapper objectMapper = new ObjectMapper();
List<Car> listCar = objectMapper.readValue(jsonCarArray, new TypeReference<List<Car>>(){});

總結

Jackson是一個可靠而成熟的用於Java的JSON序列化/反序列化庫。ObjectMapper API提供了一種簡單的方法來解析和生成JSON響應對象,具有很大的靈活性。

歡迎訪問筆者博客:blog.dongxishaonian.tech

關注筆者公眾號,推送各類原創/優質技術文章 ⬇️

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

【其他文章推薦】

※別再煩惱如何寫文案,掌握八大原則!

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※超省錢租車方案

※教你寫出一流的銷售文案?

網頁設計最專業,超強功能平台可客製化

※產品缺大量曝光嗎?你需要的是一流包裝設計!

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

Kubernetes-PV和PVC的原理和實踐

一、什麼是PV和PVC?

PV的全稱是Persistent Volume,翻譯過來為持久化存儲卷,是對底層的共享存儲的一種抽象,PV由管理員進行創建和配置,主要含存儲能力、訪問模式、存儲類型、回收策略、後端存儲類型等主要信息,它和具體的底層的共享存儲技術的實現方式有關,比如NFS、Hostpath、RBD等。

PVC的全稱是: PersistenVolumeClaim (持久化卷聲明),PVC是用戶存儲的一種聲明,PVC和Pod類似,Pod是消耗節點node資源,PVC消耗的是PV資源,Pod可以請求CPU的內存,而PVC可以請求特定的存儲空間和訪問模式。

二、PV和PVC的使用場景

 

 

 配圖來自K8S權威指南第四版

 

 存儲工程師把分佈式存儲系統上的總空間劃分成一個一個小的存儲塊,K8S的集群管理員將存儲塊和PV進行一一對應,用戶通過PVC對對存儲進行申請,比如可以指定具體容量的大小,訪問模式或者存儲類型,這樣的好處是用戶不需要關心底層的存儲實現細節,只需要直接申請使用PVC即可,若申請的PVC所對應的PV不能滿足用戶的要求,不會生效,直到有合適的PV生成,PVC會自動與PV完成綁定,存儲工程師、K8S管理員,用戶之間業務解耦,靈活性更強。

 

三、創建PV

PV支持多種不同類型的存儲,如:NFS、hostpath、RBD、ICCSI,本文以hostpath為例介紹如何創建PV

第一步:現在宿主機data目錄下data/pod/volume1,volume1將作為PV對應的hostpath本地存儲的目錄

第二步:通過yaml文件創建PV

 1 [root@k8s-master zhanglei]# cat pv-hostpath.yaml  2 kind: PersistentVolume #指定為PV類型  3 apiVersion: v1  4 metadata:  5   name: pv-statefulset #指定PV的名稱  6  labels: #指定PV的標籤  7  release: stable  8 spec:  9  capacity: 10     storage: 0.1Gi #指定PV的容量 11  accessModes: 12     - ReadWriteOnce #指定PV的訪問模式,簡寫為RWO,只支持掛在1個Pod的讀和寫 13  persistentVolumeReclaimPolicy: Recycle #指定PV的回收策略,Recycle表示支持回收,回收完成后支持再次利用 14  hostPath: #指定PV的存儲類型,本文是以hostpath為例 15     path: /data/pod/volume1 #指定PV對應後端存儲hostpath的目錄

說明:

 accessModes支持多種訪問模式

1)ReadWriteOnce(RWO):讀寫權限,但是只支持掛載在1個Pod

2)ReadOnlyMany(ROX):只讀權限,支持掛載在多個Pod

3)ReadWriteMany(RW):讀寫權限,支持掛載在多個Pod上

persistentVolumeReclaimPolicy的策略,指的是如果PVC被釋放掉后,PV的處理,這裏所說的釋放,指的是用戶刪除PVC后,與PVC對應的PV會被釋放掉,PVC個PV是一一對應的關係

1)Retain,PV的數據不會清理,會保留volume,如果需要清理,需要手動進行

2)Recycle,會將數據進行清理,即 rm -rf /thevolume/*(只有 NFS 和 HostPath 支持),清理完成后,PV會呈available狀態,支持再次的bound

3)Delete,刪除存儲資源,會刪除PV及後端的存儲資源,比如刪除 AWS EBS 卷(只有 AWS EBS, GCE PD, Azure Disk 和 Cinder 支持)

四、創建PVC

[root@k8s-master zhanglei]# cat pvc-hostpath.yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mppvc-01                  # 指定PVC的名稱
  namespace: default
spec:
 accessModes: ["ReadWriteOnce"]    # 指定PVC的訪問模式
 resources:
   requests: 
     storage: 0.05Gi               # PVC申請的容量

說明:

1)PVC聲明了accessModes訪問類型為ReadWriteOnce,創建后,系統會自動去找能夠支持ReadWriteOnce訪問類型的PV,若無符合條件的PV,則不會進行綁定,

2)PVC聲明了storage的大小為0.05Gi,創建后,系統會自動去找能夠支持此容量的PV,通常PV的容量至少要大於或者等於0.05Gi才會去進行綁定

從這裏來看,對於用戶來說,即只需要聲明訪問類型、容量、另外還可通過StorageClass聲明具體的PV類型即可完成對持久化存儲卷的申請,而不需要去維護和關注後端存儲

五、查詢PV和PVC的

經過前面的步驟我們創建了PV和PVC,現在來看下兩者是否已經完成了綁定,在PV的創建已經指定了其名稱為pv-statefulset,PVC的名稱為mppvc-01

 

 

[root@k8s-master zhanglei]# kubectl get pv |grep pv-statefulset
pv-statefulset      107374182400m   RWO            Recycle          Bound    default/mppvc-01 

 

[root@k8s-master zhanglei]# kubectl get pvc |grep mppvc-01
mppvc-01                            Bound    pv-statefulset      107374182400m   RWO                           13d

可以看到pv-statefulset這個PV已經和mppvc-01的PVC進行了綁定(Bound),RWO和Recycle也是之前PV和PVC聲明的狀態,說明綁定成功


[root@k8s-master zhanglei]# kubectl describe pv pv-statefulset
Name:            pv-statefulset
Labels:          release=stable
Annotations:     pv.kubernetes.io/bound-by-controller: yes
Finalizers:      [kubernetes.io/pv-protection]
StorageClass:    
Status:          Bound
Claim:           default/mppvc-01
Reclaim Policy:  Recycle
Access Modes:    RWO
VolumeMode:      Filesystem
Capacity:        107374182400m
Node Affinity:   <none>
Message:         
Source:
    Type:          HostPath (bare host directory volume)
    Path:          /data/pod/volume1
    HostPathType:  
Events:            <none>
[root@k8s-master zhanglei]# kubectl describe pvc mppvc-01
Name:          mppvc-01
Namespace:     default
StorageClass:  
Status:        Bound
Volume:        pv-statefulset
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      107374182400m
Access Modes:  RWO
VolumeMode:    Filesystem
Mounted By:    <none>
Events:        <none>

再來看下PV的詳細(describe)信息,可以看到type是hostpath類型,显示了數據卷在宿主機的/data/pod/volume1的目錄。

 

六、總結

創建PV和PVC分為二步:

第一步:創建PV,支持自定義不同的存儲大小和訪問模式(RWX,RWO)、存放路徑、後端服務server(如hostpath、或NAS盤的數據盤的掛載點)

第二步:創建PVC,綁定到PV。創建PVC的時候可以指定PVC的request storage,即申請的存儲的容量,會根據申請的storage和訪問模式自動匹配符合要求的PV

創建完PV和PVC主要是為了使用它來達到實現持久化存儲的目的,如何進行使用請看本作者後續與statufulset有關的文章,謝謝閱讀~

 

作者簡介:雲計算容器\K8S方向產品經理,學點技術,為更好地設計產品。

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

【其他文章推薦】

※教你寫出一流的銷售文案?

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

※回頭車貨運收費標準

※別再煩惱如何寫文案,掌握八大原則!

※超省錢租車方案

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※推薦台中搬家公司優質服務,可到府估價

機器學習——十大數據挖掘之一的決策樹CART算法

本文始發於個人公眾號:TechFlow,原創不易,求個關注

今天是機器學習專題的第23篇文章,我們今天分享的內容是十大數據挖掘算法之一的CART算法。

CART算法全稱是Classification and regression tree,也就是分類回歸樹的意思。和之前介紹的ID3和C4.5一樣,CART算法同樣是決策樹模型的一種經典的實現。決策樹這個模型一共有三種實現方式,前面我們已經介紹了ID3和C4.5兩種,今天剛好補齊這最後一種。

算法特點

CART稱為分類回歸樹,從名字上我們也看得出來,它既能支持分類又可以支持回歸。的確如此,決策樹的確支持回歸操作,但是我們一般不會用決策樹來進行回歸。這裏面的原因很多,除了樹模型擬合能力有限效果不一定好之外,還與特徵的模式有關係,樹回歸模型受到特徵的影響非常大。這個部分我們不做太多深入,之後會在回歸樹的文章當中詳細探討。

正因為回歸樹模型效果表現都不太理想,所以CART算法實現決策樹基本都是用來做分類問題。那麼在分類問題上,它與之前的ID3算法和C4.5算法又有什麼不同呢?

主要細究起來大約有兩點,第一點是CART算法使用Gini指數而不是信息增益來作為劃分子樹的依據,第二點是CART算法每次在劃分數據的時候,固定將整份數據拆分成兩個部分,而不是多個部分。由於CART每次將數據拆分成兩個部分,所以它對於拆分的次數沒有限制,而C4.5算法對特徵進行了限制,限制了每個特徵最多只能使用一次。因為這一點,同樣CART對於剪枝的要求更高,因為不剪枝的話很有可能導致樹過度膨脹,以至於過擬合。

Gini指數

在ID3和C4.5算法當中,在拆分數據的時候用的是信息增益和信息增益比,這兩者都是基於信息熵模型。信息熵模型本身並沒有問題,也是非常常用的模型。唯一的問題是,在計算熵的時候需要涉及到log運算,相比於四則運算來說,計算log要多耗時很多

Gini指數本質上也是基於信息熵模型,只是我們在計算的時候做了一些轉化,從而避免了使用log進行計算,加速了計算的過程。兩者的內在邏輯是一樣的。那怎麼實現的加速計算呢?這裏用到了高等數學當中的泰勒展開,我們將log運算通過泰勒公式展開,轉化成多項式的計算,從而加速信息熵的計算。

我們來做一個簡單的推導:

\[\begin{aligned} \ln(x) \approx \ln(x_0) + (x-x_0)\ln'(x_0) + o(x) \end{aligned} \]

我們把\(x_0 =1\)代入,可以得到:\(\ln(x)=x – 1 + o(x)\),其中o(x)是關於x的高階無窮小。我們把這個式子套入信息熵的公式當中:

\[\begin{aligned} H(x) &= -\sum_{i=1}^k p_i\ln p_i \\ &\approx \sum_{i=1}^k p_i(1-p_i) \end{aligned} \]

這個就是Gini指數的計算公式,這裏的pi表示類別i的概率,其實就是類別i的樣本佔全體樣本的比例。那麼上面的式子也可以看成是從數據集當中抽取兩條樣本,它們類別不一致的概率。

因此Gini指數越小,說明數據集越集中,也就是純度越高。它的概念等價於信息熵,熵越小說明信息越集中,兩者的概念是非常近似的。所以當我們使用Gini指數來作為劃分依據的時候,選擇的是切分之後Gini指數盡量小的切分方法,而不是盡量大的。

從上面的公式當中,我們可以發現相比於信息熵的log運算,Gini指數只需要簡單地計算比例和基礎運算就可以得到結果了,顯然運算速度要快得多。並且由於是通過泰勒展開逼近的,整體的性能也並不差,我們可以看下下面這張經典的圖感受一下:

從上圖當中可以看出來,Gini指數和信息熵的效果非常接近,一樣可以非常好地反應數據劃分的純度。

拆分與剪枝

剛才我們介紹CART算法特性的時候提到過,CART算法每次拆分數據都是二分的,這點和C4.5處理連續性特徵的邏輯很像。但有兩點不同,第一點是CART對於離散型和連續性特徵都如此操作,另外一點是,CART算法當中一個特徵可以重複使用。

舉個例子,在之前的算法當中,比如說西瓜的直徑是一個特徵。那麼當我們判斷過西瓜的直徑小於10cm之後,西瓜的直徑這個特徵就會從數據當中移除,之後再也不會用到。但是在CART算法當中不是如此,比如當我們先後根據西瓜的直徑以及西瓜是否有藤這兩個特徵對數據進行拆分之後,對於ID3和C4.5算法來說,西瓜的直徑這個特徵已經不可以再用來作為劃分的依據了,但是CART算法當中可以,我們仍然可以繼續使用之前已經用過的特徵。

我們用一張圖來展示,大概是下面這個樣子:

我們觀察一下最左側的子樹,直徑這個特徵出現了不止一次,這其實是很合理的。然而這也會有一個問題,就是由於沒有了特徵只能用一次這個限制,這樣會導致這棵樹無限膨脹,尤其是在連續性特徵很多的情況下,很容易陷入過擬合。為了放置過擬合,增加模型的泛化能力,我們需要對生成的這棵樹進行剪枝。

剪枝的方案主流的有兩種,一種是預剪枝,一種是后剪枝。所謂的預剪枝,即是在生成樹的時候就對樹的生長進行限制,防止過度擬合。而後剪枝則是在樹已經生成之後,對過擬合的部分進行修剪。其中預剪枝比較容易理解,比如我們可以限制決策樹在訓練的時候每個節點的數據只有在達到一定數量的情況下才會進行分裂,否則就成為恭弘=叶 恭弘子節點保留。或者我們可以限制數據的比例,當節點中某個類別的佔比超過閾值的時候,也可以停止生長。

后剪枝相對來說複雜一些,需要我們在生成樹之後通過一些機制尋找可以剪枝的部分,對整棵樹進行修剪。比如在CART算法當中常用的剪枝策略是CCP,它的英文全寫是Cost-Complexity Pruning,即代價複雜度剪枝。這個策略設計了一個指標來衡量一棵子樹的複雜度代價,我們可以對這個代價設置閾值來進行剪枝。

這個策略的精髓在於下面這個式子:

\[c = \frac{R(t) – R(T_t)}{|N_t| – 1} \]

這個式子當中的c就是指的剪枝帶來的代價,t代表剪枝之後的子樹,\(T_t\)表示剪枝之前的子樹。R(t)表示剪枝之後的誤差代價\(R(T_t)\)表示剪枝之前的誤差代價。其中誤差代價的定義是:\(R(t) = r(t) * p(t)\),r(t)是節點t的誤差率,p(t)是t上數據占所有數據的比例。

我們來看個例子:

假設我們知道所有數據一共有100條,那麼我們代入公式算一下,可以得到\(R(t) = r(t) * p(t) = \frac{11}{23} * \frac{23}{100} = \frac{11}{100}\)

子樹的誤差代價是:

\[R(T_t) = \sum R(i)=(\frac{2}{6}*\frac{6}{100})+ (\frac{0}{3}*\frac{3}{100}) + (\frac{2}{8}*\frac{8}{100})=\frac{4}{100} \]

所以可以得到\(c=\frac{11/100 – 4/100}{3 – 1}=\frac{7}{200}\)

c越大說明剪枝帶來的偏差越大,也就是說越不能剪,相反c很小說明偏差不大,可以減掉。我們只需要設置閾值,然後計算每一棵子樹的c來判斷是否能夠剪枝即可。

代碼實現

我們之前已經實現過了C4.5算法,再來實現CART可以說是非常簡單了,因為它相比於C4.5還少了離散類型這種情況,可以全部當做是連續型類型來處理。

我們只需要把之前的信息增益比改成Gini指數即可:

from collections import Counter

def gini_index(dataset):
    dataset = np.array(dataset)
    n = dataset.shape[0]
    if n == 0:
        return 0
    # sigma p(1-p) = 1 - sigma p^2
    counter = Counter(dataset[:, -1])
    ret = 1.0
    for k, v in counter.items():
        ret -= (v / n) ** 2
    return ret

def split_gini(dataset, idx, threshold):
    left, right = [], []
    n = dataset.shape[0]
    # 根據閾值拆分,拆分之後計算新的Gini指數
    for data in dataset:
        if data[idx] < threshold:
            left.append(data)
        else:
            right.append(data)
    left, right = np.array(left), np.array(right)
   	# 拆分成兩半之後,乘上所佔的比例
    return left.shape[0] / n * gini_index(left) + right.shape[0] / n * gini_index(right)

然後選擇拆分的函數稍微調整一下,因為Gini指數越小越好,之前的信息增益和信息增益比都是越大越好。代碼的框架基本上也沒有變動,只是做了一些微調:

def choose_feature_to_split(dataset):
    n = len(dataset[0])-1
    m = len(dataset)
    # 記錄最佳Gini,特徵和閾值
    bestGini = 1.0
    feature = -1
    thred = None
    for i in range(n):
        threds = get_thresholds(dataset, i)
        for t in threds:
            # 遍歷所有的閾值,計算每個閾值的信息增益比
            ratio = split_gini(dataset, i, t)
            if ratio < bestGini:
                bestGini, feature, thred = ratio, i, t
    return feature, thred

建樹和預測的部分都和之前C4.5算法基本一致,只需要去掉離散類型的判斷即可,大家可以參考一下之前文章當中的代碼。

總結

到這裏,我們關於決策樹模型的內容就算是結束了,我們從基本的決策樹原理,再到ID3、C4.5以及CART算法,都已經囊括了。這些知識儲備足以應對面試當中關於決策樹模型的問題了

雖然在實際的生產過程當中,我們已經用不到決策樹了,還不是基本用不到,幾乎是完全用不到。但是它的思想非常重要,是後續很多模型的基礎,比如隨機森林、GBDT等模型,都是在決策樹的基礎上建立起來的。所以我們深入理解決策樹的原理對於我們後續的進階學習非常重要。

最後, 我把完整的代碼發在了paste.ubuntu上,需要的同學可以在公眾號後台回復“決策樹”獲取。

如果喜歡本文,可以的話,請點個關注,給我一點鼓勵,也方便獲取更多文章。

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

【其他文章推薦】

※超省錢租車方案

※別再煩惱如何寫文案,掌握八大原則!

※回頭車貨運收費標準

※教你寫出一流的銷售文案?

※產品缺大量曝光嗎?你需要的是一流包裝設計!

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

網頁設計最專業,超強功能平台可客製化

單獨囚禁在水池2年 日本311倖存海豚抑鬱離世

摘錄自2020年4月15日鏡週刊報導

國際動保組織「海豚計畫」(Dolphin project)報導指出,日本寬吻海豚「Honey」於2005年在日本太地町被捕獲,自此生活在千葉線犬吠埼海洋公園僅80平方公尺大的水池中,與另一隻海豚、46隻企鵝及數百種魚類一起生活。

311大地震後面臨觀光衰退和建築物老舊,2008年11月犬吠埼海洋公園被爆出營運困難負債,正尋找買家,去年初終於轉賣,但如今整個園區卻呈現廢棄狀態,也沒有遊客造訪,僅安排員工前來餵食。另一隻海豚於2017年死亡,「Honey」自此單獨每天在這廢棄的水池中游來游去,對習性群居的海豚而言,這無疑是極大的折磨。

動保組織「海豚計畫」曾試圖聯繫買下海豚「Honey」,盼為牠找到合適的居所安享晚年,但為時已晚,3月初「Honey」狀況已經不太好,3月29日牠因阻塞性腸炎,死在待了泰半生的水池。

國際新聞
日本
核災
展示動物
動物福利

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

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

※教你寫出一流的銷售文案?

※別再煩惱如何寫文案,掌握八大原則!