如何選出適合自己的管理Helm Chart的最佳方式?_網頁設計公司

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

網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

作者:Merlin Carter,專註於早期創業公司的風險投資家,擅長撰寫開發人員創新和新技術的文章

原文鏈接:
https://insights.project-a.com/whats-the-best-way-to-manage-helm-charts-1cbf2614ec40

本文轉載自Rancher Labs

無論你喜歡與否,你都不得不承認Helm是管理Kubernetes應用程序獨一無二的工具,你甚至可以通過不同的方式使用它。

在Helm的使用過程中,我們注意到有幾個問題不斷出現:

  • 你將你的Helm chart放在哪裡?

你是使用app文件保存它們還是使用chart倉庫?

  • 你如何劃分Helm chart?

你是使用一個共享的chart或是為每個服務維護一個chart?

我正在通過我以往在各種創業公司的經驗來嘗試解決這些問題,但是我也借鑒了大型公司的做法。

以下是我要概述的幾個方法:

  1. 使用一個chart倉庫來存儲一個大型共享chart

  2. 使用一個chart倉庫來存儲許多特定於服務的chart

  3. 使用特定於服務的chart,這些chart與服務本身存儲在同一倉庫中

然後,我將介紹在決定這些選項時應該考慮的因素,例如依賴項差異和團隊結構等。

Option1:在一個chart倉庫中維護一個大型共享chart

在我們一個項目中,我們從一個用於部署多個服務的大型chart開始。它存儲在ChartMuseum中,並由負責部署基礎架構的人員進行維護。

如果你的各個服務在本質上十分類似,那麼共享chart可以為你省去很多麻煩。這裏我們採用Helm維護者Josh Dolitsky在KubeCon 2019上描述的情況:

我最近在負責一個項目,這個項目包含9個微服務……我意識到它們幾乎都是相同的HTTP監聽服務。所以我決定僅僅構建一個helm chart來部署9個不同的服務,為每個服務做不同的配置——僅為特定的服務設置一個新的docker標籤。

在這種情況下,將Helm chart存儲在ChartMuseum等chart倉庫中是有意義的,因為只有值需要保存在這些特定服務的倉庫中。

Option2:在一個chart倉庫中維護幾個特定於服務的chart

特定於服務的chart優勢在於,你可以更改一項服務,而無需擔心會破壞另一項服務。但是它們可能會導致重複的工作——如果你要更新通用配置,則必須在每個chart中進行相同的更改。

是否需要在一個chart倉庫中保存它們則是另一個問題了。如果這些chart是特定於服務的,那麼將它們存儲在一起尚沒有強有力的架構論證。當然,如果你有專門的人員或團隊來維護所有的chart,一起存儲多個特定於服務的chart通常會比較容易。

例如,與我一起工作的一位DevOps工程師,他在一个中心chart倉庫中維護15種不同的微服務chart。對於他而言,在同一個位置更新所有chart比向15個不同的倉庫提交拉取請求要容易得多。開發人員當然清楚如何更新chart,但是處理資源相關的設置顯然更吸引他們。

Option3:在與服務本身相同的倉庫種維護特定於服務的chart

對於基於微服務的應用程序來說,特定於服務的chart是一個很好的選擇。而當你將每個chart與服務代碼保存在同一倉庫中時,使用特定於服務的chart則會更好。

如果你在服務倉庫中存儲Helm chart,那麼可以更輕鬆地獨立於其他項目持續部署服務。並且你可以將chart更新(例如添加新變量)與應用程序邏輯的更改一起提交,使其更易於識別和還原重大更改。

然而,本選項的優勢取決於你所維護的微服務的數量。如果你的微服務數量正邁入兩位數,那麼這一選項的優勢則沒有那麼明顯,更多的是阻礙。如果你要處理非常同質的服務(如Josh Dolisky),則尤其如此。

決定選項時需要考慮的因素

一般情況下,有兩個方面需要考慮:

  • 依賴項和可重現:每個服務的依賴項有多少區別?對一個服務的更改有多大風險會中斷另一個服務?你如何再現特定的開發條件?

  • 團隊結構:你負責每個服務的小型自治團隊嗎?你有了解DevOps的開發人員嗎?你的團隊中DevOps文化流行程度如何?

依賴項和可重現

如果你將你的chart和應用程序分開維護,它們的版本將彼此不同。如果你在部署時遇到問題,並且需要重現導致該問題的條件,則需要確定:a)服務版本;b)用於部署它的chart版本。你可能想要走捷徑,使用“latest” chart來測試服務x.x.x,但這並不是一個好想法,因為這樣你將永遠無法重現造成問題的確切條件。

那麼,如果你經常需要更改的chart版本怎麼辦?是不是應該一起測試這些改動呢?

考慮到許多開發人員需要創建同一共享chart中的分支版本這一場景:

開發人員(圖中的Edeltraud和Eberhardt)分別在不同的分支中工作,並且想要在開發環境中測試他們的更改以及圖表更改——所以他們還需要分支chart。同時,DevOps工程師在他的共享chart的分支中更新一些常用組件。

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

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

如果沒有人將他們的chart更改更新到各個分支,那麼就有可能破壞另一個服務部署。

不久前,我們正好遇到了這個問題。Chart維護者用一個新的條件塊更新了共享chart。該語句檢查了一個新的變量“foo”是否被設置為“啟用”。然而,變量“foo”還沒有在所有服務的值文件中定義。對於缺少該變量的服務,部署中斷了。不幸的是,當時chart中沒有定義默認的回滾行為。

如果chart和代碼位於同一個倉庫中,並且可以在同一個分支中進行測試,則針對這些問題的測試將更加容易。

即使一開始似乎是矯枉過正,我們也會這樣做。我們的工作對象是很少有依賴項的服務。對於每個服務,Helm chart只部署一個帶有特定Docker標籤的主容器。chart的名稱和docker標籤是通過變量傳遞進來的。儘管如此,我們仍然避免了使用共享chart,而是選擇在每個服務倉庫中放置單獨的chart。

這主要是因為我們只處理了四個服務。但我們的開發人員也更喜歡掌控所有能夠影響CI/CD的配置。然而情況並非總是如此,所以現在是研究另一個維度的好時機。

團隊結構

Chart維護的問題同時也取決於誰管理部署流程。

這裏推薦另一篇文章,由Helm維護者Matt Farina撰寫的,在文章中他闡述了關於Helm正在嘗試解決複雜性的話題。文章鏈接:

https://codeengineered.com/blog/2018/helm-kustomize-complexity/

他闡明了必須處理Kubernetes複雜性的三個主要角色。為了清楚起見,我將對其內容進行一些解釋,並將角色描述如下:

  1. App開發人員——這個角色主要構建服務、添加特性以及修復bug

  2. Deployer——這個角色負責將應用程序推向世界。理想情況下,有一個不錯的自動化程序可以為他們部署應用程序,但是他們知道它的工作方式,可以根據需要進行修改。

  3. 系統工程師——這一角色負責維護deployer部署的Kubernetes環境。他們是管理計算機資源的專家,並且可以盡量減少任何服務的停機時間。

第一個和第三個角色你都能在公司里找到與其負責內容相符的職位,而Deployer這個角色則有些模糊,這個角色所負責的內容常常會被其他兩個角色的人接管——這會影響你如何管理你的Helm chart。

尚在早期階段的初創公司的DevOps

如前所述,我們的業務是為初創企業提供運維支持,這些企業往往需要快速擴大規模。我們見過很多“非常規”的設置和分工。在早期階段,App開發者可能會負責各種事情,有些人甚至會幫忙完成系統管理員的任務,比如設置打印機或配置辦公室網絡等。他們會儘力去了解其他兩個角色所需要負責的內容,因為沒有人可以幫助他們(直到我們參与進來)。

一旦他們想了解Helm,大多數應用開發者會把他們的chart放在最容易處理的地方——也就是他們維護的同一個repo。

在大型企業中的DevOps

你可能在一個更大的、架構更分明的團隊中工作,

在這種情況下,你可能有自己的DevOps工程師甚至是整個DevOps部門。而這個人或團隊經常會覺得自己也要負責 “Deployer”的角色。很有可能,他們會傾向於採用更集中的方法,比如將所有的chart存儲在ChartMuseum這樣的chart倉庫中。更不願意讓應用開發者過多地參与到Helm chart中來(往往是有合理緣由的)。

例如,我最近看了一個經典的技術講座,叫《從頭開始構建Helm chart》,由VMWare系統工程師Amy Chen主講。在她的開場白中,她說:

在基礎設施方面,你的主要目標是時刻準備着應對故障,沒有信任——在這個意義上說,就像我不太願意信任我的APP開發者,並且我也不太需要信任我的APP開發者。

這是可以理解的。你不想讓應用開發者去搞亂設置,比如CPU和內存限制,或者是pod中斷預算。但整個 “DevOps文化”的概念是專門為了改善基礎設施維護者和開發者之間有時會出現的疏離關係而演化出來的。

實踐DveOps文化

Atlassian(JIRA和Trello的所有者)出版了一本“團隊手冊”,其中定義了DevOps文化:

DevOps文化是關於開發者和運維之間的共同理解,併為他們所構建的軟件分擔責任。這意味着增加透明度、溝通和協作,並在開發、IT/運維和 “業務”之間進行合作。

如果將其實際應用到Helm chart維護和一般的基礎架構配置中,就會把大部分的責任放在應用開發者的手中。他們也會承擔起“Deployer”的角色,並改變他們擁有的倉庫中的配置。

系統工程師仍然可以把他們專門維護的設置集中起來。例如,一些團隊也會維護一个中央基礎架構repo,該repo中保存着Terraform配置或Helm文件等常用資源,這些資源是啟動新項目所需要的(例如,用於設置ingress controller和cert manager)。Helm 3還支持所謂的 “library chart”,它只能作為另一個chart的一部分進行部署。這讓我們更容易區分常見的和服務特定的變更責任。

即使當chart存儲在服務倉庫中,系統工程師仍然可以作為重要更改的把關人。例如,你可以使用GitHub CODEOWNERS文件來確保系統工程師在你的repo中的chart目錄中的任何更改都會被添加為審核者。

如果系統工程師需要主動做一些與應用開發無關的改動,可以指導開發人員為他們做更改,並解釋為什麼這些改動是必須的。以下圖片也許能反映這種情況:

開發者可以了解更多關於基礎設施的內容以及這些更改如何影響他們的服務。

經驗法則

如果有簡單的經驗法則,那就是:先了解選項3。嘗試為服務倉庫中的每個服務維護一個Helm chart。或者至少考慮一下我之前描述的混合方法。

如果你有幾十個服務都非常相似,那麼共享chart是更好的選擇。只是要記住,你必須把它維護在一个中心repo中。但是這增加了意外耦合的風險,可能會破壞一個服務部署。風險增加意味着你在部署的時候需要更加謹慎,這反過來又意味着你會減少部署的頻率。

即使你有特定服務的chart,你可能也需要集中存儲,因為你沒有足夠的人員或專業知識以分佈式的方式來管理這些chart。或者,也許你的團隊需要在“Deployer”和“應用開發者”之間明確劃分責任。

無論你決定做什麼,我希望我已經說明清楚了你在做最後決定時需要考慮的問題。做一個“Deployer”並不容易,尤其是當它不是你的日常工作時。

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

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

台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

我終於看懂了HBase,太不容易了…_網頁設計公司

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

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

前言

只有光頭才能變強。

文本已收錄至我的GitHub精選文章,歡迎Star:https://github.com/ZhongFuCheng3y/3y

在我還不了解分佈式和大數據的時候已經聽說過HBase了,但對它一直都半知不解,這篇文章來講講吧。

在真實生活中,最開始聽到這個詞是我的一場面試,當年我還是個『小垃圾』,現在已經是個『大垃圾』了。

面試官當時給了一個場景題問我,具體的題目我忘得差不多了,大概就是考試與試題的一個場景,問我數據庫要如何設計。

我答了關係型數據庫的設計方案,他大概說:這個場景比較複雜多變,為什麼不考慮一下HBase這種NoSQL的數據庫來存儲呢

我就說:“對對對,可以的” (雖然我當時不知道HBase是什麼,但是氣勢一定要有,你們說是不是)

最後面試官還是給我發了offer,但我沒去,原因就是離家太遠了。

一、介紹HBase

Apache HBase™ is the Hadoop database, a distributed, scalable, big data store.

HBase is a type of “NoSQL” database.

Apache HBase 是 Hadoop 數據庫,一個分佈式、可伸縮的大數據存儲

HBase是依賴Hadoop的。為什麼HBase能存儲海量的數據?因為HBase是在HDFS的基礎之上構建的,HDFS是分佈式文件系統

二、為什麼要用HBase

截至到現在,三歪已經學了不少的組件了,比如說分佈式搜索引擎「Elasticsearch」、分佈式文件系統「HDFS」、分佈式消息隊列「Kafka」、緩存數據庫「Redis」等等…

能夠處理數據的中間件(系統),這些中間件基本都會有持久化的功能。為什麼?如果某一個時刻掛了,那還在內存但還沒處理完的數據不就涼了?

Redis有AOF和RDB、Elasticsearch會把數據寫到translog然後結合FileSystemCache將數據刷到磁盤中、Kafka本身就是將數據順序寫到磁盤….

這些中間件會實現持久化(像HDFS和MySQL我們本身就用來存儲數據的),為什麼我們還要用HBase呢?

雖然沒有什麼可比性,但是在學習的時候總會有一個疑問:「既然已學過的系統都有類似的功能了,那為啥我還要去學這個玩意?」

三歪是這樣理解的:

  • MySQL?MySQL數據庫我們是算用得最多了的吧?但眾所周知,MySQL是單機的。MySQL能存儲多少數據,取決於那台服務器的硬盤大小。以現在互聯網的數據量,很多時候MySQL是沒法存儲那麼多數據的。
    • 比如我這邊有個系統,一天就能產生1TB的數據,這數據是不可能存MySQL的。(如此大的量數據,我們現在的做法是先寫到Kafka,然後落到Hive中)
  • Kafka?Kafka我們主要用來處理消息的(解耦異步削峰)。數據到Kafka,Kafka會將數據持久化到硬盤中,並且Kafka是分佈式的(很方便的擴展),理論上Kafka可以存儲很大的數據。但是Kafka的數據我們不會「單獨」取出來。持久化了的數據,最常見的用法就是重新設置offset,做「回溯」操作
  • Redis?Redis是緩存數據庫,所有的讀寫都在內存中,速度賊快。AOF/RDB存儲的數據都會加載到內存中,Redis不適合存大量的數據(因為內存太貴了!)。
  • Elasticsearch?Elasticsearch是一個分佈式的搜索引擎,主要用於檢索。理論上Elasticsearch也是可以存儲海量的數據(畢竟分佈式),我們也可以將數據用『索引』來取出來,似乎已經是非常完美的中間件了。
    • 但是如果我們的數據沒有經常「檢索」的需求,其實不必放到Elasticsearch,數據寫入Elasticsearch需要分詞,無疑會浪費資源。
  • HDFS?顯然HDFS是可以存儲海量的數據的,它就是為海量數據而生的。它也有明顯的缺點:不支持隨機修改,查詢效率低,對小文件支持不友好。

上面這些技術棧三歪都已經寫過文章了。學多了你會發現它們的持久化機制都差不太多,有空再來總結一下。

文中的開頭已經說了,HBase是基於HDFS分佈式文件系統去構建的。換句話說,HBase的數據其實也是存儲在HDFS上的。那肯定有好奇寶寶就會問:HDFS和HBase有啥區別阿

HDFS是文件系統,而HBase是數據庫,其實也沒啥可比性。「你可以把HBase當做是MySQL,把HDFS當做是硬盤。HBase只是一個NoSQL數據庫,把數據存在HDFS上」。

數據庫是一個以某種有組織的方式存儲的數據集合

扯了這麼多,那我們為啥要用HBase呢?HBase在HDFS之上提供了高併發的隨機寫和支持實時查詢,這是HDFS不具備的。

我一直都說在學習某一項技術之前首先要了解它能幹什麼。如果僅僅看上面的”對比“,我們可以發現HBase可以以低成本存儲海量的數據並且支持高併發隨機寫和實時查詢。

但HBase還有一個特點就是:存儲數據的”結構“可以地非常靈活(這個下面會講到,這裏如果沒接觸過HBase的同學可能不知道什麼意思)。

三、入門HBase

聽過HBase的同學可能都聽過「列式存儲」這個詞。我最開始的時候覺得HBase很難理解,就因為它這個「列式存儲」我一直理解不了它為什麼是「列式」的。

在網上也有很多的博客去講解什麼是「列式」存儲,它們會舉我們現有的數據庫,比如MySQL。存儲的結構我們很容易看懂,就是一行一行數據嘛。

轉換成所謂的列式存儲是什麼樣的呢?

可以很簡單的發現,無非就是把每列抽出來,然後關聯上Id。這個叫列式存儲嗎?我在這打個問號

轉換后的數據從我的角度來看,數據還是一行一行的。

這樣做有什麼好處嗎?很明顯以前我們一行記錄多個屬性(列),有部分的列是空缺的,但是我們還是需要空間去存儲。現在把這些列全部拆開,有什麼我們就存什麼,這樣空間就能被我們充分利用

這種形式的數據更像什麼?明顯是Key-Value嘛。那我們該怎麼理解HBase所謂的列式存儲和Key-Value結構呢?走進三歪的小腦袋,一探究竟。

3.1 HBase的數據模型

在看HBase數據模型的時候,其實最好還是不要用「關係型數據庫」的知識去理解它。

In HBase, data is stored in tables, which have rows and columns. This is a terminology overlap withrelational databases (RDBMSs), but this is not a helpful analogy.

HBase裡邊也有表、行和列的概念。

  • 表沒什麼好說的,就是一張表
  • 一行數據由一個行鍵一個或多個相關的列以及它的值所組成

好了,現在比較抽象了。在HBase裡邊,定位一行數據會有一個唯一的值,這個叫做行鍵(RowKey)。而在HBase的列不是我們在關係型數據庫所想象中的列。

HBase的列(Column)都得歸屬到列族(Column Family)中。在HBase中用列修飾符(Column Qualifier)來標識每個列。

在HBase裡邊,先有列族,後有列

什麼是列族?可以簡單理解為:列的屬性類別

什麼是列修飾符?先有列族後有列,在列族下用列修飾符來標識一列

還很抽象是不是?三歪來畫個圖:

我們再放點具體的值去看看,就更加容易看懂了:

這張表我們有兩個列族,分別是UserInfoOrderInfo。在UserInfo下有兩個列,分別是UserInfo:nameUserInfo:age,在OrderInfo下有兩個列,分別是OrderInfo:orderIdOrderInfo:money

UserInfo:name的值為:三歪。UserInfo:age的值為24。OrderInfo:orderId的值為23333。OrderInfo:money的值為30。這些數據的主鍵(RowKey)為1

上面的那個圖看起來可能不太好懂,我們再畫一個我們比較熟悉的:

HBase表的每一行中,列的組成都是靈活的,行與行之間的列不需要相同。如圖下:

換句話說:一個列族下可以任意添加列,不受任何限制

數據寫到HBase的時候都會被記錄一個時間戳,這個時間戳被我們當做一個版本。比如說,我們修改或者刪除某一條的時候,本質上是往裡邊新增一條數據,記錄的版本加一了而已。

比如現在我們有一條記錄:

現在要把這條記錄的值改為40,實際上就是多添加一條記錄,在讀的時候按照時間戳讀最新的記錄。在外界「看起來」就是把這條記錄改了。

3.2 HBase 的Key-Value

HBase本質上其實就是Key-Value的數據庫,上一次我們學Key-Value數據庫還是Redis呢。那在HBase裡邊,Key是什麼?Value是什麼?

我們看一下下面的HBaseKey-Value結構圖:

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

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

Key由RowKey(行鍵)+ColumnFamily(列族)+Column Qualifier(列修飾符)+TimeStamp(時間戳–版本)+KeyType(類型)組成,而Value就是實際上的值。

對比上面的例子,其實很好理解,因為我們修改一條數據其實上是在原來的基礎上增加一個版本的,那我們要準確定位一條數據,那就得(RowKey+Column+時間戳)。

KeyType是什麼?我們上面只說了「修改」的情況,你們有沒有想過,如果要刪除一條數據怎麼做?實際上也是增加一條記錄,只不過我們在KeyType裡邊設置為“Delete”就可以了。

3.3 HBase架構

扯了這麼一大堆,已經說了HBase的數據模型和Key-Value了,我們還有一個問題:「為什麼經常會有人說HBase是列式存儲呢?」

其實HBase更多的是「列族存儲」,要談列族存儲,就得先了解了解HBase的架構是怎麼樣的。

我們先來看看HBase的架構圖:

1、Client客戶端,它提供了訪問HBase的接口,並且維護了對應的cache來加速HBase的訪問。

2、Zookeeper存儲HBase的元數據(meta表),無論是讀還是寫數據,都是去Zookeeper裡邊拿到meta元數據告訴給客戶端去哪台機器讀寫數據

3、HRegionServer它是處理客戶端的讀寫請求,負責與HDFS底層交互,是真正幹活的節點。

總結大致的流程就是:client請求到Zookeeper,然後Zookeeper返回HRegionServer地址給client,client得到Zookeeper返回的地址去請求HRegionServer,HRegionServer讀寫數據后返回給client。

3.4 HRegionServer內部

我們來看下面的圖:

前面也提到了,HBase可以存儲海量的數據,HBase是分佈式的。所以我們可以斷定:HBase一張表的數據會分到多台機器上的。那HBase是怎麼切割一張表的數據的呢?用的就是RowKey來切分,其實就是表的橫向切割。

說白了就是一個HRegion上,存儲HBase表的一部分數據。

HRegion下面有Store,那Store是什麼呢?我們前面也說過,一個HBase表首先要定義列族,然後列是在列族之下的,列可以隨意添加。

一個列族的數據是存儲在一起的,所以一個列族的數據是存儲在一個Store裡邊的。

看到這裏,其實我們可以認為HBase是基於列族存儲的(畢竟物理存儲,一個列族是存儲到同一個Store里的)

Store裡邊有啥?有Mem Store、Store File、HFile,我們再來看看裡邊都代表啥含義。

HBase在寫數據的時候,會先寫到Mem Store,當MemStore超過一定閾值,就會將內存中的數據刷寫到硬盤上,形成StoreFile,而StoreFile底層是以HFile的格式保存,HFile是HBase中KeyValue數據的存儲格式。

所以說:Mem Store我們可以理解為內存 buffer,HFile是HBase實際存儲的數據格式,而StoreFile只是HBase里的一個名字。

回到HRegionServer上,我們還漏了一塊,就是HLog

這裏其實特別好理解了,我們寫數據的時候是先寫到內存的,為了防止機器宕機,內存的數據沒刷到磁盤中就掛了。我們在寫Mem store的時候還會寫一份HLog

這個HLog是順序寫到磁盤的,所以速度還是挺快的(是不是有似曾相似的感覺)…

稍微總結一把:

  • HRegionServer是真正幹活的機器(用於與hdfs交互),我們HBase表用RowKey來橫向切分表
  • HRegion裡邊會有多個Store,每個Store其實就是一個列族的數據(所以我們可以說HBase是基於列族存儲的)
  • Store裡邊有Men Store和StoreFile(HFile),其實就是先走一層內存,然後再刷到磁盤的結構

3.5 被遺忘的HMaster

我們在上面的圖會看到有個Hmaster,它在HBase的架構中承擔一種什麼樣的角色呢?讀寫請求都沒經過Hmaster呀

那HMaster在HBase里承擔什麼樣的角色呢??

HMaster is the implementation of the Master Server. The Master server is responsible for monitoring all RegionServer instances in the cluster, and is the interface for all metadata changes.

HMaster會處理 HRegion 的分配或轉移。如果我們HRegion的數據量太大的話,HMaster會對拆分后的Region重新分配RegionServer。(如果發現失效的HRegion,也會將失效的HRegion分配到正常的HRegionServer中)

HMaster會處理元數據的變更和監控RegionServer的狀態。

四、RowKey的設計

到這裏,我們已經知道RowKey是什麼了。不難理解的是,我們肯定是要保證RowKey是唯一的,畢竟它是行鍵,有了它我們才可以唯一標識一條數據的。

在HBase裡邊提供了三種的查詢方式:

  1. 全局掃描
  2. 根據一個RowKey進行查詢
  3. 根據RowKey過濾的範圍查詢

4.1 根據一個RowKey查詢

首先我們要知道的是RowKey是會按字典序排序的,我們HBase表會用RowKey來橫向切分表。

無論是讀和寫我們都是用RowKey去定位到HRegion,然後找到HRegionServer。這裡有一個很關鍵的問題:那我怎麼知道這個RowKey是在這個HRegion上的

HRegion上有兩個很重要的屬性:start-keyend-key

我們在定位HRegionServer的時候,實際上就是定位我們這個RowKey在不在這個HRegion的start-keyend-key範圍之內,如果在,說明我們就找到了。

這個時候會帶來一個問題:由於我們的RowKey是以字典序排序的,如果我們對RowKey沒有做任何處理,那就有可能存在熱點數據的問題。

舉個例子,現在我們的RowKey如下:

java3y111
java3y222
java3y333
java3y444
java3y555
aaa
bbb
java3y777
java3y666
java3y...

Java3yxxx開頭的RowKey很多,而其他的RowKey很少。如果我們有多個HRegion的話,那麼存儲Java3yxxx的HRegion的數據量是最大的,而分配給其他的HRegion數量是很少的。

關鍵是我們的查詢也幾乎都是以java3yxxx的數據去查,這會導致某部分數據會集中在某台HRegionServer上存儲以及查詢,而其他的HRegionServer卻很空閑。

如果是這種情況,我們要做的是什麼?對RowKey散列就好了,那分配到HRegion的時候就比較均勻,少了熱點的問題。

HBase優化手冊:

建表申請時的預分區設置,對於經常使用HBase的小夥伴來說,HBase管理平台里申請HBase表流程必然不陌生了。

給定split的RowKey組例如:aaaaa,bbbbb,ccccc;或給定例如:startKey=00000000,endKey=xxxxxxxx,regionsNum=x

第一種方式:

是自己指定RowKey的分割點來劃分region個數.比如有一組數據RowKey為[1,2,3,4,5,6,7],此時給定split RowKey是3,6,那麼就會劃分為[1,3),[3,6),[6,7)的三個初始region了.如果對於RowKey的組成及數據分佈非常清楚的話,可以使用這種方式精確預分區.

第二種方式 :

如果只是知道RowKey的組成大致的範圍,可以選用這種方式讓集群來均衡預分區,設定始末的RowKey,以及根據數據量給定大致的region數,一般建議region數最多不要超過集群的rs節點數,過多region數不但不能增加表訪問性能,反而會增加master節點壓力.如果給定始末RowKey範圍與實際偏差較大的話,還是比較容易產生數據熱點問題.

最後:生成RowKey時,盡量進行加鹽或者哈希的處理,這樣很大程度上可以緩解數據熱點問題.

4.2根據RowKey範圍查詢

上面的情況是針對通過RowKey單個查詢的業務的,如果我們是根據RowKey範圍查詢的,那沒必要上面那樣做。

HBase將RowKey設計為字典序排序,如果不做限制,那很可能類似的RowKey存儲在同一個HRegion中。那我正好有這個場景上的業務,那我查詢的時候不是快多了嗎?在同一個HRegion就可以拿到我想要的數據了

舉個例子:我們會間隔幾秒就採集直播間熱度,將這份數據寫到HBase中,然後業務方經常要把主播的一段時間內的熱度給查詢出來。

我設計好的RowKey,將該主播的一段時間內的熱度都寫到同一個HRegion上,拉取的時候只要訪問一個HRegionServer就可以得到全部我想要的數據了,那查詢的速度就快很多。

最後

最後三歪再來帶着大家回顧一下這篇文章寫了什麼:

  1. HBase是一個NoSQL數據庫,一般我們用它來存儲海量的數據(因為它基於HDFS分佈式文件系統上構建的)
  2. HBase的一行記錄由一個RowKey和一個或多個的列以及它的值所組成。先有列族後有列,列可以隨意添加。
  3. HBase的增刪改記錄都有「版本」,默認以時間戳的方式實現。
  4. RowKey的設計如果沒有特殊的業務性,最好設計為散列的,這樣避免熱點數據分佈在同一個HRegionServer中。
  5. HBase的讀寫都經過Zookeeper去拉取meta數據,定位到對應的HRegion,然後找到HRegionServer

參考資料:

  • https://blog.csdn.net/bitcarmanlee/article/details/78979836
  • https://hbase.apache.org/book.html#arch.overview
  • https://zhuanlan.zhihu.com/p/54184168
  • 硬核乾貨長文!Hbase來了解一下不?
  • https://www.jianshu.com/p/569106a3008f
  • 趣談Hbase架構
  • https://www.cnblogs.com/BIG-BOSS-ZC/p/11807304.html
  • 一條數據的HBase之旅,簡明HBase入門教程-開篇
  • https://chenhy.com/post/hbase-quickstart/
  • https://www.cnblogs.com/zmoumou/p/10292676.html
  • https://www.cnblogs.com/duanxz/p/3154487.html
  • https://www.jianshu.com/p/4e412f48e820
  • HBase 基本入門篇
  • 什麼是列式存儲?

各類知識點總結

下面的文章都有對應的原創精美PDF,在持續更新中,可以來找我催更~

  • 92頁的Mybatis
  • 129頁的多線程
  • 141頁的Servlet
  • 158頁的JSP
  • 76頁的集合
  • 64頁的JDBC
  • 105頁的數據結構和算法
  • 142頁的Spring
  • 58頁的過濾器和監聽器
  • 30頁的HTTP
  • 42頁的SpringMVC
  • Hibernate
  • AJAX
  • Redis
  • ……

涵蓋Java後端所有知識點的開源項目(已有8K+ star):

  • GitHub
  • Gitee訪問更快

給三歪點個贊,對三歪真的非常重要!

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

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

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

Python機器學習筆記:SVM(1)——SVM概述,Python機器學習筆記:SVM(1)——SVM概述,Python機器學習筆記:SVM(2)——SVM核函數,Python機器學習筆記:SVM(3)——證明SVM,Python機器學習筆記:SVM(4)——sklearn實現,Python機器學習筆記:Logistic Regression_網頁設計公司

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

搬家費用:依消費者運送距離、搬運樓層、有無電梯、步行距離、特殊地形、超重物品等計價因素後,評估每車次單

前言

  整理SVM(support vector machine)的筆記是一個非常麻煩的事情,一方面這個東西本來就不好理解,要深入學習需要花費大量的時間和精力,另一方面我本身也是個初學者,整理起來難免思路混亂。所以我對SVM的整理會分為四篇(暫定為四篇)學習,不足之處,請多多指導。

  四篇分別為:

Python機器學習筆記:SVM(1)——SVM概述

Python機器學習筆記:SVM(2)——SVM核函數

Python機器學習筆記:SVM(3)——證明SVM

Python機器學習筆記:SVM(4)——sklearn實現

  在整理筆記的時候,參考了不少的資料,不少網絡寫的優秀論文,博客,回答等。於是我在學習了SVM之後,加入了自己的理解,結合網友的筆記整理了自己能理解的SVM,於此寫下自己的學習筆記。本着取之於網絡,還之於網絡的想法,最後將博客公開,最後申明一下,參考的博客,知乎等地址,我均會附於文章後面,不喜勿噴,謝謝。

  下面言歸正傳,開始學習SVM。

1,SVM的基本思想

  支持向量機,因為英文名為 support vector machine,故一般簡稱為SVM。他是一種常用的判別方法,在機器學習領域是一個有監督的學習模式,通常用來進行模型識別,分類,回歸分析以及異常值檢測。

  通俗的講:支持向量機是一種兩類分類模型,其基本模型定義為特徵空間上的間隔最大的線性分類器,其學習策略(分割原則)便是間隔最大化,最終可轉換為一個凸二次規劃問題的求解

  支持向量機是許多大佬在多年研究統計學習理論基礎上對線性分類器提出的另一種設計最佳準則。其原理也從線性可分說起,然後擴展到線性不可分的情況。甚至擴展到使用非線性函數中去。

  支持向量機的提出有很深的理論背景,這個我們後面再學習,下面先說一下SVM的基本思想,SVM的主要思想可以概括為兩點:

  1 它是針對線性可分情況進行分析,對於線性不可分情況,通過使用非線性映射算法將低維輸入空間線性不可分的樣本轉化為高維特徵空間使其可分,從而使得高維特徵空間採用線性算法對樣本的非線性特徵進行線性分析成為可能。

  2 它是基於結果風險最小化理論之上在特徵空間中構建最優超平面,使得學習器得到全局最優化,並且在整個樣本空間的期望以某個概率滿足一定上界。

  支持向量機的線性分類:是給定一組訓練實例,每個訓練實例被標記為屬於兩個類別中的一個或另一個,SVM訓練算法創建一個將新的實例分配給兩個類別之一的模型,使其成為非概率二元線性分類器。SVM模型是將實例表示為空間中的點,這樣映射就使得單獨類別的實例被盡可能寬的明顯的間隔分開。然後,將新的實例映射到同一空間,並基於他們落在間隔的哪一側來預測所屬類別。

  支持向量機的非線性分類:除了進行線性分類之外,SVM還可以使用所謂的核技巧有效的進行非線性分類,將其輸入隱式映射到高維特徵空間中。當數據未被標記時,不能進行監督式學習,需要用非監督式學習,它會嘗試找出數據到簇的自然聚類,並將新數據映射到這些已形成的簇。將支持向量機改進的聚類算法被稱為支持向量聚類,當數據未被標記或者僅一些數據被標記時,支持向量聚類經常在工業應用中用作分類步驟的預處理。

   SVM(Support Vector Machines)——支持向量機是在所有知名的數據挖掘算法中最健壯,最準確的方法之一,它屬於二分類算法,可以支持線性和非線性的分類。發展到今天,SVM已經可以支持多分類了。

  首先,我們看一個例子:

   比如上圖中,我們用一條直線將兩類數據分開了,但是我畫了三條線,而且這三條都能分開,但是這三條線那條更好呢?用SVM的思想來說,就是什麼樣的決策邊界才是最好的呢?更進一步,當數據特徵更加複雜,本身如果很難分,怎麼辦呢?那特徵複雜后,計算複雜度如何呢那SVM能實際應用嗎

  讓我們帶着這些問題來學習SVM,而理解SVM,我們先得明白一個概念:線性分類器。

2,分類標準的起源:Logistic回歸

  之前整理的Logistic回歸博文地址:

Python機器學習筆記:Logistic Regression

  我們從最起源說起,雖然說之前博文已經學習過Logistic 回歸了,不懂的可以去看看,有詳細的筆記。但是這裏我還是簡單的再學習一邊別人理解的Logistic回歸筆記,溫故而知新。

  給定一些數據點,他們分別屬於兩個不同的類,現在要找到一個線性分類器把這些數據分成兩類。如果用 x 表示數據點,用 y表示類別(y可以取1或者-1,代表兩個不同的類),一個線性分類器的學習目標便是要在 n 維的數據空間中找到一個超平面(hyper plane),這個超平面的方程可以表示為(其中WT中的T表示轉置):

   Logistic回歸的目的是從特徵學習出一個 0/1 分類模型,而這個模型是將特徵的線性組合作為自變量,由於自變量的取值範圍是負無窮到正無窮。因此,使用Logistic函數(或者也稱為Sigmoid函數)將自變量映射到(0, 1)上,映射后的值被認為是屬於 y=1 的概率。

  我們假設函數如下:

   其中 x 是 n 維特徵向量,函數 g 就是Logistic函數,我們令 z = ΘTx ,則 g(z)為:

   其圖像為:

   可以看到,將無窮映射到了(0,  1),而我們假設的 hΘx 就是特徵屬於 y=1的概率:

   從而,當我們要判別一個新來的特徵屬於那個類的時候,只需要求出 hΘx 即可,若 hΘx 大於 0.5就是 y=1的類,反之屬於 y=0 的類。

   此外,hΘx 只和 θTx有關, θTx >0 ,那麼 hΘx >0.5,而 g(z) 只是用來映射,真實的類別決定權還是在於  θTx 。再者,當  θTx >> 0 時,hΘx = 1,反之 hΘx = 0。如果我們只從  θTx 出發,希望模型達到的目標就是讓訓練數據中 y=1 的特徵  θTx >> 0,而 y=0 的特徵  θTx << 0。Logistic回歸就是要學習得到  θ,使得正例的特徵遠大於0,負例的特徵遠小於0,而且要在全部訓練實例上達到這個目標。

  接下來,嘗試把 Logistic 回歸做個變形。首先,將使用的結果標籤 y=0 和 y=1 替換為 y = -1, y=1,然後將下面公式的 θ0 替換為 b。

   最後將後面的 一串替換為 WTx,即下面一串被替換:

   如此,則有了:

   也就是說除了將 y由 y=0 變為 y=-1外,線性分類函數跟 logistic回歸的形式化g表示函數沒有區別,下面是Logistic回歸的形式化表示函數:

  對於邏輯回歸我們先說到這裏,下面看線性分類和邏輯回歸的比較。

  SVM和Logistic雖然說都是尋找一個線性分類界限,但出發點不同。SVM是以訓練集兩個類的邊界(支持向量)來考慮劃分,而Logistic是從訓練集的全局來考慮劃分。這也就是為什麼Logistic受噪聲和離群點的影響比較大。當出現一個離群點時,Logistic劃定的邊界很有可能會改變。而SVM這邊劃分的邊界卻可能絲毫不動(因為離群點並不影響我支持向量)。

3,線性分類的一個例子

3.1 線性可分的二分類模型

  什麼是線性可分呢?如果一個線性函數能夠將樣本分開,稱這些數據樣本是線性可分的。那麼什麼是線性函數呢?在二維空間中就是一條直線,在三維空間中就是一個平面,依次類推,如果不考慮空位維度,這樣的線性函數就統稱為超平面。我們一般所說的線性可分支持向量機就對應着能將數據正確劃分並且間隔最大的直線。

  定理1:線性二分類模型的目標就是找到一組合適的參數(w,  b),使得:

   即:線性二分類模型希望在特徵空間找到一個劃分超平面,將屬於不同標記的樣本分開

  我們下面舉個簡單的例子。如下圖所示,現在有一個二維平面,平面上有兩種不同的數據,分別用圈和叉表示。由於這些數據是線性可分的,所以可以用一條直線將這兩類數據分開,這條直線就相當於一個超平面,超平面一邊的數據點所對應的 y 全是 -1 ,另一邊所對應的 y 全是1。

   上面的超平面可以用分類函數 f(x) 表示,f(x)如下:

   當 f(x)=0 的時候,x便是位於超平面上的點,而 f(x) > 0的點對應 y=1 的數據點,f(x) < 0 的點對應 y = -1的點,如下圖所示:

   換言之,在進行分類的時候,遇到一個新的數據點 x,將 x 代入 f(x) 中,如果 f(x) 小於0,則將 x 的類別賦予 -1,稱 xi 為負例;如果 f(x) 大於  0,則將 x 的類別賦予 1,稱xi為正例。

  所以接下來的問題是,如何確定這個超平面呢?從直觀上而言,這個超平面應該是最適合分類兩類數據的直線。而判定“最適合”的標準就是這條直線離直線兩邊的數據的間隔最大。所以,得尋找有着c最大間隔的超平面。這個問題,我們先擱置一下,下面說一下線性可分支持向量機。

3.2 線性可分支持向量機  

  線性可分支持向量機(SVM)也是一種線性二分類模型,也需要找到滿足 定理1 約束的劃分超平面,即(w,  b),由於能將樣本分開的超平面可能有很多,SVM進一步希望找到離個樣本都比較遠的劃分超平面。

  當面對樣本的隨機擾動時,離每個樣本都比較遠的劃分超平面對擾動的容忍能力比較強,即不容易因為樣本的隨機擾動使得樣本穿越到劃分超平面的另外一側而產生分類錯誤。因此這樣的劃分超平面對樣本比較穩健,不容易過擬合。另一方面,離各樣本都比較遠的劃分超平面不僅可以把正負樣本都分開,還可以比較大的確信度將所有樣本分開,包括難分的樣本,即離劃分超平面近的樣本。

  分類學習最基本的思想就是基於訓練集 D 在樣本空間中找到一個劃分超平面,將不同類別的樣本分開,但是能將訓練樣本分開的劃分超平面可能有很多,所有我們應該去找位於兩類訓練樣本“正中間”的劃分超平面。因為該劃分超平面對訓練樣本局部擾動的“容忍”性最好,例如,由於訓練集的局限性或者噪聲的因素,訓練集外的樣本可能比正中間的訓練樣本更接近於兩個類的分割界,這將使得許多劃分超平面出現錯誤。而正中間的超平面影響最小,所以這個劃分超平面所產生的結果是魯棒的。

  所以問題就變為哪一個分類超平面是最優的?而要算最優超平面,肯定先算出間隔,只有間隔最大化,才能找出最優超平面,所以下面學習函數間隔。

4,函數間隔 functional margin 與幾何間隔 geometrical  margin

  間隔(margin):每個訓練觀測點到超平面距離中的最小值。

  上面也提到了,我們的劃分超平面可以用如下線性方程來描述:

  其中W為法向量,決定了超平面的方向,b為位移量,決定了超平面與原點的距離。

  假設超平面能將訓練樣本正確的分類,即對訓練樣本(xi,  yi),滿足以下公式:

   該公式稱為最大間隔假設,yi = +1 表示樣本為正樣本,yi = -1 表示樣本為負樣本,式子前面選擇 >= +1, <= -1隻是為了方便計算,原則上可是任意常數,但無論是多少,都可以通過對 w 的變換使其為 +1 和 -1,實際上公式等價於:

  在超平面 w*x+b=0 確定的情況下, | w*x+b | 能夠表示點 x 到距離超平面的遠近,而通過觀察 w*x+b 的符號與類標記 y 的符號是否一致可以判斷分類是否正確,所以,可以用 (y * (w*x+b))的正負性來判定或表示分類的正確性。於此,我們便引出了函數間隔(functional margin)的概念。

  一般的,當樣本點被分類正確時,定義函數間隔(用 γ hat 表示)為:

   而超平面(w,  b)關於 訓練數據集T 中所有樣本點(xi , yi)的函數間隔最小值(其中, x是特徵, y是結果標籤,i表示第 i 個樣本),便為超平面(w,  b)關於訓練數據集T的函數間隔(即訓練觀測與超平面的間隔):

   但這樣定義的函數間隔有問題,即如果成比例的改變 w 和 b (假設將他們改為 2w 和 2b),則函數間隔的值 f(x) 卻變成了原來的 2 倍(雖然此時超平面沒有改變),所以引出真正定義點到超平面的距離——幾何間距(geometrical  margin)的概念。

  假定對於一個點 x,令其垂直投影到超平面上的對應點為 x0, w是垂直於超平面的一個向量,γ 為樣本 x 到超平面的距離,如下圖所示:

   根據平面幾何知識,有:

   其中 ||w|| 為 w 的二階范數(范數是一個類似於模的表示長度的概念),w / ||w|| 是單位向量(一個向量除以它的模稱之為單位向量)。

  又由於 x0 是超平面的點,滿足 f(x0) = 0,代入超平面的方差 wTx+b=0 ,可得 wTx0+b=0,即 wTx0 = -b。

  隨即讓上式(平面幾何所得公式)的兩邊同時乘以 WT,然後根據 wTx0 = -b 和 wTw = ||w||2,即可算出 γ :

   為了得到 γ 的絕對值,令 γ 乘上對應的類別 y,即可得出幾何間隔 (用 γ hat 表示)的定義:

   從上述函數間隔和幾何間隔的定義可以看出:幾何間隔就是函數間隔除以 ||w||,而且函數間隔  y * (w*x+b) = y * f(x) 實際上就是 | f(x) |,只是人為定義的一個間隔度量,而且幾何間隔 | f(x) | / || w || 才是直觀上的點到超平面的距離。

4.1 點到超平面的距離

  這裏補充一下點到超平面的距離的概念。設二維空間存在一個超平面實現二類可分如下圖所示:

  圖中的斜線表示超平面 g(x) = w*x + b = 0,二維平面上一點 X 在超平面的距離投影為 X’,則二者關係可表示為 X = X’ + λ w(w 表示超平面的梯度向量),將 X 代入到 g(x)得:

  點到超平面的距離即是 X 與 X’ 之間的距離:

  該公司為高等數學中點到平面的距離公式,只不過這裏點和平面表達式的係數都用向量表示了。而我們上面卻是使用函數間隔和幾何間隔的角度引入距離的。所以注意區分。

  我們使用PPT的內容表達如下:

5,最大間隔分類器 Maximum Margin Classifier 的定義

  最大間隔超平面:間隔最大的超平面,即使得訓練觀測到分割超平面的間隔達到最大。

  支持向量:樣本點中與分離超平面距離最近的樣本點的實例

  最大間隔超平面的選取只與支持向量有關

  對一個數據點進行分類,當超平面離數據點的“間隔”越大,分類的確信度(confidence)也越大。所以,為了使得分類的確信度盡量高,需要讓所選擇的超平面能夠最大化這個“間隔”值。這個間隔就是下面的Gap的一半。

   通過由前面的分析可知:函數間隔不適合用來最大化間隔值,因為在超平面固定以後,可以等比例地縮放 w 的長度和 b 的值,這樣可以使得 f(x) = wTx + b 的值任意大,亦即函數間隔 γ hat 可以在超平面保持不變的情況下被取得任意大。但幾何間隔因為除上了 ||w||,使得在縮放 w 和 b 的時候幾何間隔 γ hat 的值是不會改變的,它只隨着超平面的變動而變動。因此,這是更加合適的一個間隔。換言之,這裏要找的最大間隔分類超平面中的“間隔”指的是幾何間隔。

  於是最大間隔分類器(maximum  margin  classifier)的目標函數可以定義為: max  γ hat

  同時需要滿足一些條件,根據間隔的定義,有(下面兩個式子是等價的):

   其中,s.t 即subject to,它導出的是約束條件。

  即我們希望最大化超平面關於訓練集的間隔 γ ,約束條件表示的是超平面關於每個訓練樣本點的間隔至少是 γ

  回歸一下幾何間隔的定義:

   可知:如果令函數間隔 γ hat 等於1(之所以令 γ hat =1,是為了方便推導和優化,且這樣做對目標函數的優化沒有影響)則有 γ hat = 1 / || w || 且:

   從而上述目標函數轉換成了(即線性可分支持向量機模型的最優化問題):

   相當於在相應的約束條件下(約束條件為上上式子),最大化這個 1 / ||w|| 值,而 1 / ||w|| 便是幾何間隔 γ hat 。

  如下圖所示,中間的實線便是尋找到的最優超平面(optimal Hyper Plane),其到兩條虛線邊界的距離相等,這個距離便是幾何間隔 γ hat ,兩條虛線間隔邊界之間的距離等於  2*γ hat ,而虛線間隔邊界上的點則是支持向量。由於這些支持向量剛好在虛線間隔邊界上,所以他們滿足 y( wTx + b) = 1(還記得我們把functional margin 定位1了嗎?上面我們方便推導和優化的目的,我們可以令 γ hat = 1),而對於所有不是支持向量的點,則顯然有 y( wTx + b) > 1。

   所以線性可分支持向量機模型的最優化問題:

   這是一個凸二次規劃問題,若能求出(1)~(2)的解 w*, b*,那麼就可以得到最大間隔超平面 w*Tx + b = 0 t及分類決函數 f(x)

   其實到目前為止,對於只關心如何使用SVM的盆友便足夠了。可以不用深究其更深的原理了。而需要深究的話,那就接着來。

6,從線性可分到線性不可分

  支持向量機是一種二分類模型,他的目的是尋找一個超平面對樣本進行分割,分割的原則是間隔最大化,最終轉換為一個凸二次規劃問題來求解,而由簡至繁的模型包括:

  • 當訓練樣本線性可分時,通過硬間隔最大化,學習一個線性可分支持向量機
  • 當訓練樣本近似線性可分時,通過軟間隔最大化,學習一個線性支持向量機
  • 當訓練樣本線性不可分時,通過核技巧和軟間隔最大化,學習一個非線性支持向量機

  說這個的目的是什麼呢?就是我們上面一堆例子,通過線性可分的例子說明了支持向量機,要深入學習支持向量機,我們第一步肯定是從訓練樣本線性可分過渡到線性不可分。

  那我們接着從之前的目標函數說:

   由於求 1 / ||w|| 的最大值相當於求 1 /2  ||w||2 的最小值,所以上述目標函數等價於(w 由分母變為分子,從而也由原來的 max 問題變為 min 問題,很明顯,兩者問題等價):

  因為現在的目標函數是二次的,約束條件是線性的,所以它是一個凸二次規劃問題(這些我們上面均提到了)。那麼這個問題如何求解呢?

  可以用線程的QP(Quadratic Programming)優化包進行求解。簡單來說:就是在一定的約束條件下,目標最優,損失最小。

  此外,由於這個問題的特殊結構,還可以通過拉格朗日對偶性(Lagrange  Duality)變換到對偶變量(dual variable)的優化問題,即通過求解與原問題等價的對偶問題(dual problem)得到原始問題的最優解,這就是線性可分條件下支持向量機的對偶算法,這樣做的優點在於:一者對偶問題往往更容易求解;二者可以自然的引入核函數,進而推廣到非線性分類問題。

6.1整理一下我們的思緒

  這裏使用老師的PPT,整理一下我們對SVM的理解。

6.2  從原始問題到對偶問題的求解

  那麼什麼是拉格朗日對偶性呢?簡單來說,通過對每一個約束條件加上一個拉格朗日乘子(Lagrange multiplier)α,然後定義出拉格朗日函數(通過拉格朗日函數將約束條件融合到目標函數里去,從而只用一個函數表達式便能清楚的表達出我們的問題)

  然後令:

   而當所有約束條件都滿足時,則最優值為:

   上式最優值即最初要最小化的量,所以在要求約束條件得到滿足的情況下最小化  1 /2  ||w||2 ,實際上等價於直接最小化 Θ(w) (當然,這裏也有約束條件(即KKT條件的約束),就是 αi >= 0, i=1,….n),容易驗證,當某個約束條件不滿足時,例如 yi * (w*xi + b) < 1,那麼顯然有 Θ(w) = ∞(只要令 αi = ∞ 即可)

  具體寫出來,目標函數變成了:

   這裏用 P* 表示這個問題的最優解,且和最初的問題是等價的。如果直接求解,那麼一上來便得面對 w  和 b 這兩個參數,而 αi 又是不等式約束,這個求解過程不好做。不妨把最小和最大的位置交換一下,變成:

  交換以後的新問題是原始問題的對偶問題,這個新問題的最優值用 d* 來表示。而且有 d* <= p*,在滿足某些條件的情況下,這二者等價,這時候就可以通過求解對偶問題來間接地求解原始問題。

  換言之,之所以從 min  max 的原始問題 p*,轉換為 max min 的對偶問題 d*,一者是因為 d* 是 p* 的近似解,二者轉換為對偶問題后,更容易求解。

  所以下面可以先求 L 對w, b的極小,再求 L 對 α  的極大。

   上面提到了 d* <= p* 在滿足某些條件的情況下,二者等價,而要讓兩者等價需滿足 strong  duality(強對偶),而後有學者在強對偶下提出了KKT條件,且KKT條件的成立要滿足 constraint qualifications,而 constraint qualifications 之一就是  Slater條件。所謂的Slater條件,即指:凸優化問題,如果存在一個點 x,使得所有等式約束都成立,並且所有不等式約束都嚴格成立(即取嚴格不等號,而非等號),則滿足Slater條件。對於此處,Slater條件成立,所以 d* <= p* 可以取等號。

  一般的,一個最優化數學模型能夠表示成下列標準形式:

  其中f(x)是需要最小化的函數,h(x)是等式約束,g(x)是不等式約束,p和q分別為等式約束和不等式約束的數量。

  同時,得明白以下兩點:

   而KKT的條件就是指上面最優化數學模型的標準形式中的最小點 x* 必須滿足下面的條件:

   經過論證,我們這裏的問題是滿足KKT條件的(首先已經滿足Slater條件,再者 f 和 gi 也都是可微的,即 L 對 w 和 b 都可導),因此現在我們便轉換為求解第二個問題。

  也就是說原始問題通過滿足KKT條件,已經轉換成了對偶問題。而求解這個對偶學習問題,分為三個步驟:

  • 1,要讓 L(w, b, a) 關於 w 和 b 最小化,
  • 2,求 對 α 的極大
  • 3,利用SMO算法求解對偶問題中的拉格朗日乘子

6.3 對偶問題求解的三個步驟

  根據拉格朗日的對偶性,原始問題的對偶問題是極大極小問題,所以我們求解對偶問題的步驟如下:

  (1)首先固定 α,要讓 L 關於 w 和 b 最小化,我們分別對 w, b 求偏導數,即令  ∂L / ∂w 和 ∂L / ∂b 等於零:

  將求偏導數的結果,代入下式:

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

透過選單樣式的調整、圖片的縮放比例、文字的放大及段落的排版對應來給使用者最佳的瀏覽體驗,所以不用擔心有手機版網站兩個後台的問題,而視覺效果也是透過我們前端設計師優秀的空間比例設計,不會因為畫面變大變小而影響到整體視覺的美感。

  得到:

   推導過程如下:

   最後,得到:

   上面推導過程中,“倒數第4步” 推導到  “倒數第3步” 使用了線性代數的轉置運算,由於 ai 和 yi 都是實數,因此轉置后與自身一樣。“倒數第3步” 推導到“倒數第2步” 使用了(a + b + c + …)(a + b + c + …) = aa + ab + ac +ba +bb + bc + … 的乘法法則。最後一步是上一步的順序調整。

  從上面的最後一個式子,我們可以看出,此時的拉格朗日函數只包含一個變量,那就是 αi 便能求出 w 和 b,由此可見,上面提出來的核心問題:分類函數  f(x) = wTx + b 也可以輕而易舉的求出來。

  (2)對 α 的極大,即是關於對偶問題的最優化問題。經過上面第一個步驟的求 w 和 b,得到的拉格朗日函數式子已經沒有變量 w,  b ,只有 α 。從上面的式子得到:

   這樣,求出了 αi ,根據上面對 w 求偏導的式子,我們可以求出 w。然後通過下面式子,可以求出b,最終得到分離超平面和分類決策函數:

   (3)在求得 L(w,  b,  a) 關於 w 和 b 最小化,以及對  α 的極大值后,最後一步則可以利用 SMO 算法求解對偶問題中的拉格朗日乘子  α。

  我們需要構造並求解對偶約束最優化問題

   上述式子要解決的是在參數 {α1, α2, α3,…..αn} 上求最大值 W的問題,至於 x(i) 和 y(i) 都是已知數。要了解這個SMO算法如何推導,後面繼續學。

6.4 拉格朗日乘子法求解SVM

  這裏繼續使用老師的PPT對SVM的推導做一個梳理,其實就是整理上面6.2  6.3 小節的內容。

7,從線性不可分到非線性問題

  為了過渡到非線性分類情況,我們先看看上述推導過程中得到的一些有趣的形式。

  首先就是關於我們的 hyper plane,對於一個數據點 x 進行分類,實際上是通過把 x 代入到   f(x) = wTx + b 算出結果然後根據其正負號來進行類別劃分的。而前面的推導,我們得出:

  因此分類函數為:

   這裏的形式的有趣之處在於,對於新點 x 的預測,只需要計算它與訓練數據點的內積即可( < ·,  ·>表示向量內積),這一點直觀重要,是之後使用Kernel進行非線性推廣的基本前提。此外,所謂 Supporting  Vector 也在這裏显示出來——事實上,所謂非 Supporting Vector所對應的係數 α 都是等於零的,因此對於新點的內積計算實際上只需要針對少量的“支持向量” 而不是所有的訓練數據即可。

  為什麼非支持向量對應的  α 等於零呢?直觀上來看理解的話,就是這些“後方”的點——正如我們之前分析過一樣,對超平面是沒有影響的,由於分類完全由超平面決定,所以這些無關的點並不會參与分類問題的計算,因而也就不會產生任何影響了。

  首先,我們看看通過Lagrange multiplier 得到的目標函數:

   注意到如果 xi 是支持向量的話,上式中紅顏色的部分是等於0 的(因為支持向量的 functional margin 等於1),而對非支持向量來說,functional margin 會大於 1,因此紅顏色部分是大於零的,而 αi 又是非負的,為了滿足最大化,  αi 必須等於0。這也就是這些非 supporting vector 的局限性。

   至此,我們便得到了一個 maximum  margin hyper plane classifier,這就是所謂的支持向量機(Support Vector Machine)。當然,,到目前為止,我們的SVM還比較弱,只能處理線性的情況,不過,在得到了對偶 dual 形式之後,通過 Kernel推廣到非線性的情況就變成了一件非常容易的事情了(我們之前說過:通過求解對偶問題得到最優解,這就是線性可分條件下支持向量機的對偶算法,這樣做的優點在於:一者對偶問題往往更容易求解;二者可以自然的引入核函數,進而推廣到非線性分類問題)。

8,從線性不可分到特徵空間映射與核函數問題——線性不可分支持向量機

8.1 線性不可分

  線性不可分定義如下圖:

   對於上圖的二分類數據點,普通線性分類器不行,最大間隔超平面和軟間隔超平面也無能為力。面對這樣的線性不可分問題,通常的思路是找一個非線性分類邊界(比如組合分類器)來實現分類,而SVM則另闢蹊徑,將數據點從原始空間映射到特徵空間,而數據在特徵空間往往就能實現線性可分。

8.2 特徵空間映射

  對於非線性問題,線性可分支持向量機並不能有效解決,要使用非線性模型才能很好的分類。

  • 一維空間向二維空間映射

  下面我們考慮一維空間的二分類問題:

   我們將它進行一個二次變換,換到二維空間,這裏的變換為 x -> x2

   從上面的例子,我們知道變換的核心思想就是:將原始輸入空間的數據集映射到高維特徵空間中,從而使得數據集可分

  • 二維空間向二維特徵空間映射

  上圖中二維空間不可分,但是變換一下坐標空間,也能實現線性可分。

  • 二維空間向三維空間的映射

 

  二維空間的數據點不僅可以映射到二維空間,同樣也可以映射到三維,如上所示,所以同樣可以找到一個超平面能夠實現在三維空間的線性可分。

   首先將原始的輸入特徵通過函數 h(xi) 映射到高維空間,拉格朗日對偶有如下形式:

   決策函數為:

8.3  核函數

  原始空間向特徵空間的映射需要藉助映射函數 Ψ(x)。例如對於數據點 xi,映射到特徵空間就變成了Ψ(xi)。而SVM的一大巧妙之處就是映射后的特徵空間數據點內積的計算等價於低維空間數據點在映射函數對應的核函數中計算。這大大降低了運算量,因為有的時候高維空間的計算很複雜,下圖是一個將 m 維度向量的映射到特徵空間的映射函數的例子:

  映射后的維度大概是 m^2 / 2 維,則計算映射后的數據內積 Ψ(xi)T*Ψ(xj) 的時間複雜度為 O(n^2)。而如果使用核函數,則計算複雜度會降低為 O(n),例如:

   其中 a,b為 m維的向量,Ψ(a) 為 a 經過上面的映射函數后的 m^2 / 2維向量,可以看出核函數 K(a, b) = (aT*b + 1)2 計算的時間複雜度為 O(n)。

   核函數是指:設從輸入空間 Χ 到特徵空間 H的一個映射 h,對任意 x, z 屬於 X,函數 K(x,  z) 滿足 K(x,  z) = (h(x),  h(z)),則稱 K 為核函數。

  具體的核函數,我們下一節完整介紹,這裏不再贅述。

  核技巧:在學習與預測中只定義核函數,而不显示的定義映射函數 h。

   通常,直接計算 K(x, z)比較容易,而通過 h(x) 和 h(z) 計算 K(x, z)並不容易。

  而成為核函數的充要條件:設 K 是對稱函數,則 K(x, z)為核函數的充要條件是對輸入空間中任意xi,i=1,2,….m,Gram矩陣K = [K(xi, xj)] m * m 是半正定矩陣。

  對偶問題的目標函數:

   決策函數的形式:

   對SVM從簡到難的介紹就到這裏,然後下一篇文章主要學習核函數的問題,下下一篇對使用Sklearn實現SVM進行了解,最後我們證明一下SVM。這個系列就算結束。可能這一個多月的整理,我不是百分百理解它,但是我相信這是我理解它的開始。

9,從線性不可分到軟間隔問題——使用鬆弛變量處理 outliers(軟間隔支持向量機)

  軟間隔(soft-margin):有時候數據中有一些噪音點,如果我們考慮他們,那麼我們的分割超平面就不太好了。

  在之前討論支持向量機的時候,我們就假定,數據是線性可分的,即我們可以找到一個可行的超平面將數據完全分開。後來為了處理非線性數據,在下文使用 Kernel 方法對原來的線性 SVM 進行了推廣,使得非線性的情況也能處理。雖然通過映射 Φ(•) 將原始數據映射到高維空間之後,能夠線性分隔的概率大大增加,但是對於某些情況還是很難處理。

  例如可能並不是因為數據本身是非線性結構的,而只是因為數據有噪音。對於這種偏離正常位置很遠的數據點,我們稱之為 outlier,在我們原來的SVM模型里,outlier的存在有可能造成很大的影響,因為超平面本身就是只有少數幾個 support vector 組成的,如果這些 support vector里又存在 outliers 的話,其影響就很大了。例如下圖:

  用黑圈圈起來的那個藍點是一個 outlier,它偏離了自己原本應該在的那個半空間,如果直接忽略掉它的話,原來的分割超平面還是挺好的,但是由於這個 outlier 的出現,導致分割超平面不得不被擠歪了,變成途中黑色虛線所示(這隻是一個示意圖,並沒有嚴格計算精確坐標),同時 margin 也相應變小了。當然,更嚴重的情況是,如果這個 outlier 再往右上移動一些距離的話,我們將無法構造出能將數據分開的超平面來。

  為了處理這種情況,SVM 允許數據點在一定程度上偏離一下超平面。例如上圖中,黑色實線所對應的距離,就是該 outlier 偏離的距離,如果把它移動回來,就剛好落在原來的超平面藍色間隔邊界上,而不會使得超平面發生變形了。

  也就是說,在有鬆弛的情況下 outline 點也屬於支持向量SV,同時,對於不同的支持向量,拉格朗日參數的值也不同,如此篇論文 《Large  Scale Machine Learning》中的下圖所示:

  對於遠離分類平面的點值為0;對於邊緣上的點值在 [0, 1/L],其中,L為訓練數據集個數,即數據集大小;對於 outline  數據和內部的數據值為 1/L。

  OK,繼續回到問題,我們原來的約束條件為:

   現在考慮到 outlier 問題,約束條件變成了:

   其中,ξi >= 0 稱為鬆弛變量(slack  variable),對應數據點 xi 允許偏離的 functional  margin 的量。當然,如果我們運行 ξi 任意大的話,那任意的超平面都是符合條件的了。所以,我們在原來的目標函數後面加上一項,使得這些 ξi 的總和也要最小,即軟間隔支持向量機的學習問題如下(原始問題):

   其中 C是懲罰係數,用於控制目標函數中兩項(“尋找 margin 最大的超平面” 和 “保證數據點偏差量最小”)之間的權重。注意,其中 ξ 是需要優化的變量(之一),而 C 是一個事先確定好的常量C值大時對誤分類的懲罰增加(C趨於很大時,意味着分類嚴格不能有錯誤),C值小時對誤分類的懲罰減小(C趨於很小時,意味着可以有更大的錯誤容忍)。完整的寫出來是這個樣子:

  所以上式包含兩層含義,使  ||w||2/2 盡量小即間隔盡量大,同時使誤分類點的個數盡量小,C是調和兩者的係數,有了上式,就可以和線性可分支持向量機一樣考慮線性可分支持向量機一樣考慮線性支持向量機的學習過程,此時,線性不可分支持向量機的學習問題可以變為之前的凸二次規劃問題的求解。

   用之前的方法將限制或約束條件加入到目標函數中,得到新的拉格朗日函數,如下所示:

  約束如下:

   分析方法和前面一樣,轉換為另一個問題之後,解法類似,我們先讓 L 針對 w,  b 和 ξ 最小化:

   將 w 帶回 L 並化簡,得到和原來一樣的目標函數:

   不過由於我們得到 C – αi – ri = 0 而 又有 ri >= 0 (作為 Lagrange multiplier 的條件),因此有 αi <= C,所以整個 dual 問題現在寫作:

   把前後的結果對比一下:

   可以看到唯一的區別就是現在 dual  varibale α 多了一個上限 C。而 Kernel 化的非線性形式也是一樣的,只要把 <xi,  xj> 換成 k(xi,  xj)即可。這樣一來,一個完整的可以處理線性和非線性並能容忍噪音和 outliers 的支持向量機就介紹完畢了。

  所以可以做一個總結,不準確的說:SVM它本質上是一個分類方法,用 WT+b 定義分類函數,於是求 w,b為尋最大間隔,引出 1 / 2 || w || ^2,繼而引入拉格朗日因子,化為對拉格朗日乘子a 的求解(求解過程中會設計一系列的最優化或凸二次規劃等問題),如此,求 w.b 與 求 a 等價,而 a 的求解可以用一種快速學習算法 SMO,至於核函數,是為了處理非線性問題,若直接映射到高維計算恐維度爆炸,故在低維計算,等效高維表現。

10,支持向量機(SVM)的優缺點

  支持向量機(SVM)是一組用於分類,回歸和異常值檢測的監督學習方法。

10.1  支持向量機(SVM)的優點:

  • 在高維空間有效
  • 在維度數量大於樣本數量的情況下仍然有效
  • 在決策功能(稱為支持向量)中使用訓練點的子集,因此他也是內存有效的
  • 多功能:可以為決策功能指定不同的內核函數。提供通過內核,也可以指定自定義內核

10.2  支持向量機(SVM)的缺點:

  • 如果特徵數量遠遠大於樣本數量,則該方法可能會導致交叉的性能
  • 支持向量機不直接提供概率估計,這些是使用昂貴的五折交叉驗證計算的

 

知識儲備1:什麼叫凸優化?

  我們可以看到,上麵線性可分支持向量機模型的最優化問題如下:

   上面的基本型目標函數是二次的,約束條件是線性的,這是一個凸二次規劃問題。可以直接用現成的優化計算包求解。但若利用“對偶問題”來求解,會更高效。

  • 啥是凸?什麼是凸優化?

  凸優化說的是這樣一回事情:

   凸優化可以想象成給我一個凸函數,我們需要找最低點。

  • 為啥叫二次規劃問題呢?

  據了解。目標函數和約束條件都為變量的線性函數,叫做——線性規劃問題。目標函數為變量的二次函數和約束條件為變量的線性函數,叫做二次規劃問題。

   拉格朗日對偶性,即通過給每一個約束條件加上一個拉格朗日乘子。然後定義出拉格朗日函數,通過拉格朗日函數將約束條件融合進目標函數中。目的是,只需要通過一個目標函數包含約束條件,便可以解釋清楚問題。

知識儲備2:有約束最優化問題的數學模型

   SVM 問題是一個不等式約束條件下的優化問題。絕大多數模式識別教程在討論這個問題時都會加上優化算法的簡介。

2.1  有約束優化問題的幾何意向

  約束條件一般分為等式約束和不等式約束,前者表示為 g(x) = 0 ;後者表示為 g(x) <= 0、

  假設 x 屬於 Rd(就是這個向量一共有 d 個標量組成),則 g(x) = 0 則是由 d-1 維的超平面。那麼有約束優化問題就要求在這個 d-1 維的曲面或者超平面上找到能使得目標函數最小的點,這個 d-1 維的曲面就是“可行解區域”。

  對於不等式約束條件, g(x) <= 0 ,則可行解區域 d-1 維曲面擴展成 d 維空間的一個子集。我們可以從  d=2 的二維空間進行比對理解。等式約束對應的可行解空間就是一條線;不等式約束對應的則是這條線以及線的某一側對應的區域,就像下面的這幅圖(圖中的模板函數等高線其實就是等值線,在同一條等值線上的點對應的目標函數值相等)。

2.2  拉格朗日乘子法

  儘管上面我們已經想象出有約束優化問題的幾何意向。可是如何利用代數方法找到這個被約束了的最優解呢?這就需要用到拉格朗日乘子法。

  首先定義原始目標函數 f(x),拉格朗日乘子法的基本思想是把約束條件轉換為新的目標函數 L(x,  λ) 的一部分,從而使有約束優化問題變成我們習慣的無約束優化問題,那麼該如何去改造原來的目標函數 f(x),使得新的目標函數 L(x,  λ)  的最優解恰好在可行解區域中呢?這就需要我們去分析可行解區域的最優解的特點。

知識儲備3:KKT條件

   KKT條件是一個線性規劃問題能有最優解的充分和必要條件。

  對於不等式約束條件 g(x) <= 0 的情況,如下圖所示,最優解所在的位置 x* 有兩種可能,或者在邊界曲線 g(x)=0 上或者在可行解區域內部滿足不等式 g(x) < 0 的地方。

  第一種情況:最優解在邊界上,就相當於約束條件就是 g(x) = 0.參考下圖,注意此時的目標函數 f(x) 的最優解是在可行解區域外面,所以函數 f(x) 在最優解 x* 附加的變化趨勢是“在可行解區域內側較大而在區域外側較小”,與之對應的是函數 g(x) 在可行解區域內小於 0 ,在區域外大於零,所以在最優解 x* 附加的變換趨勢是內部較小而外部較大。這意味着目標函數 f(x) 的梯度方向與約束條件函數 g(x) 的梯度方向相反。因此根據下式,可以推斷出參數 λ > 0。

   一般的,一個最優化數學模型可以表示成如下形式:

   h(x) 是等式約束,g(x)是不等式約束,p, q表示約束的數量。

  而這個最優化數學模型的最優解 x* 需滿足的條件(即KTT條件)為:

  可能上面這樣說,大家還是有點模糊,我代入SVM中來看。

  對於帶等式和不等式的約束問題,在最優點處必須滿足KKT條件,將KKT條件應用於SVM原問題的拉格朗日乘子函數,得到關於所有變量的方程,對於原問題中的兩組不等式約束,根據KKT條件必須滿足(和上面的一樣):

  對於第一個方程,第一種情況:如果 αi > 0,則必須有:

   即:

  而由於 ξi  >= 0,因此必定有:

   再來看第二種情況:如果αi = 0,則對

  的值沒有約束。由於有 αi + βi = C 的約束,因此 βi = C ,又因為 βiξi = 0 的限制,如果 βi >0,則必須有 ξi = 0。由於原問題中有約束條件:

  而由於 ξi = 0,因此有

  最後第三種情況:對於 αi > 0 的情況,我們又可以細分為 αi < C  αi = C 的情況。如果 αi < C  ,由於有 αi + βi = C 的約束,因此有 βi > 0;因為有 βiξi = 0 的約束,因此有 ξi = 0。不等式約束:

   變為:

   由於 0 <  αi < C 時,既要滿足:

  又要滿足:

   因此有:

   將三種情況合併起來,在最優點,所有樣本都必須滿足:

   上面第一種情況對應的是自由變量即非支持向量,第二種情況對應的是支持向量,第三種情況對應的是違反不等式約束的樣本。在SMO算法求解中,會應用此條件來選擇優化變量。

 

 

參考文獻:

https://zhuanlan.zhihu.com/p/31652569

https://zhuanlan.zhihu.com/p/57648645

http://www.360doc.com/content/18/0727/00/7669533_773495537.shtml

https://mp.weixin.qq.com/s/ZFWJUazMbAqeoSIkXjuG5g

https://blog.csdn.net/qq_35992440/article/details/80987664

https://zhuanlan.zhihu.com/p/24638007

https://blog.csdn.net/weixin_40170902/article/details/80113128

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

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

節能減碳愛地球是景泰電動車的理念,是創立景泰電動車行的初衷,滿意態度更是服務客戶的最高品質,我們的成長來自於你的推薦。

20多萬預算 90%的人不會考慮買這些車 這到底是為什麼?_網頁設計公司

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

台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

99萬東風日產-西瑪售價:23。48-26。78萬沃爾沃亞太-沃爾沃S60L售價:26。69-55。99萬總結:目前來說,大眾邁騰、奧迪A4L、本田雅閣等傳統中級車,在市場的統治地位仍然牢不可破。但隨着消費升級和多元化需求的高漲,有個性有實力的中級車更容易贏得一部分人的青睞,而推薦的這四款轎車恰好做到了。

現在汽車市場的同質化情況可謂是愈來愈嚴重,擺在競爭激烈的中級車市場更是如此。但是,對於購買中級車的潛在用戶來說,

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

網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

價格因素不再是首要的,產品力才是關鍵。隨着各大品牌在中級車領域各顯神通,一些有個性、有顏值以及有實力的中級車,逐漸獲得了更多用戶的認可。

一汽馬自達-阿特茲

售價:17.58-23.98萬

東風雪鐵龍C6

售價:18.99-27.99萬

東風日產-西瑪

售價:23.48-26.78萬

沃爾沃亞太-沃爾沃S60L

售價:26.69-55.99萬

總結:目前來說,大眾邁騰、奧迪A4L、本田雅閣等傳統中級車,在市場的統治地位仍然牢不可破。但隨着消費升級和多元化需求的高漲,有個性有實力的中級車更容易贏得一部分人的青睞,而推薦的這四款轎車恰好做到了。那麼問題來了,你們最喜歡哪一款呢?本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

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

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

我把勞斯萊斯開到冒煙!怎麼辦?_網頁設計公司

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

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

5,中控面板的花紋則是碳纖維鋁絲材質編製而成的,強調運動的同時卻不乏典雅。動力方面,搭載6。6L雙渦輪增壓V12發動機,最大輸出功率624馬力,峰值扭矩870牛·米,較普通版本提升了70牛。米。與之匹配的則是8速自動變速箱,儘管這是一輛更強調運動的勞斯萊斯,撥片換擋也並沒有出現,負責人表示那些東西不夠“勞斯萊斯”。

勞斯萊斯品牌自誕生之初就是為了打造世界上最奢華的汽車。所以以往我們談起勞斯萊斯,首先聯想到的就是車主肯定是一個超有錢的老頭。

可能連勞斯萊斯他們自己人也發現了這個問題,隨着全球巨富的平均年齡越來越低,勞斯萊斯於2013年正式發布魅影車型。

其英文名稱Wraith則是來自於曾經的勞斯萊斯經典車型Silver Wraith。一款定位於豪華GT型跑車的勞斯萊斯,其目標就是更年輕的消費人群。

而此次我們體驗的則是魅影的Black Badge 特別版本。

Black Badge是勞斯萊斯誕生112年以來,首次將雙R字母LOGO採用黑底色搭配銀色字體的反色設計。

車頭的“歡慶女神”在設計、材質和姿態都沒有轉變的前提下,Black Badge車型採用高光澤度的特別黑色材質,讓“歡慶女神”搖身一變化身為黑夜的“魅惑女郎”,徜徉在夜晚迷人的都市之中。

此外,進氣格柵外框、下進氣口裝飾條、後備箱把手、排氣管等原本使用的高光鍍鉻材質也被更具神秘格調的黑色材質所取代。

以複合碳纖維材質和輕質鋁材結合的新型輪轂,通過輪輞外邊緣的疊層設計,從而達到44片碳纖維式的超高強度,大大減輕了懸挂的簧下質量,保證極佳的觀感同時還擁有更加卓越的性能。

內飾採用了黑色與藍色搭配的內飾設計,顯得十分大膽張揚,

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

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

歡慶女神按鈕經過特殊處理后,始終不會染上指紋,星空車頂讓你忘了什麼是pM2.5,中控面板的花紋則是碳纖維鋁絲材質編製而成的,強調運動的同時卻不乏典雅。

動力方面,搭載6.6L雙渦輪增壓V12發動機,最大輸出功率624馬力,峰值扭矩870牛·米,較普通版本提升了70牛.米 。與之匹配的則是8速自動變速箱,儘管這是一輛更強調運動的勞斯萊斯,撥片換擋也並沒有出現,負責人表示那些東西不夠“勞斯萊斯”。

本以為勞斯萊斯的體驗活動會是在某個高端會所之類的,意想不到的是來到了賽道。低速行駛的時候安靜得像溜車,但你踩下地板油的時候,車頭裡的V12引擎傳來了美妙的引擎聲,一瞬間會讓你忘記了你是在一輛勞斯萊斯裏面。

最為令人稱道的則是那套勞斯萊斯稱為“魔毯”的懸挂系統,感覺就像是你坐在一塊巨大的黃油上被推着走,在保證如此強大的運動特性的同時還能保持如此舒適的感受,讓你不得不深深的佩服。

整個體驗過程結束後會讓你知道,勞斯萊斯的追求不僅限於精湛的手工工藝和對奢華的見解。在人工如此高昂的歐洲,每一個按鍵,每一針縫線,每一塊皮革,每一顆螺絲,都由是手工親自完成。

Black Badge的面世也表明了他們從未放棄過對激越速度、完美工程設計與舒適駕駛體驗的不懈追求,進一步挖掘和展現了其更為神秘、個性的一面。或許這對於勞斯萊斯說是一個變革的開始。

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

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

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

這款起價只要6萬多的在9月份賣了兩萬多台的SUV車主愛她么_網頁設計公司_網頁設計公司

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

透過選單樣式的調整、圖片的縮放比例、文字的放大及段落的排版對應來給使用者最佳的瀏覽體驗,所以不用擔心有手機版網站兩個後台的問題,而視覺效果也是透過我們前端設計師優秀的空間比例設計,不會因為畫面變大變小而影響到整體視覺的美感。

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

節能減碳愛地球是景泰電動車的理念,是創立景泰電動車行的初衷,滿意態度更是服務客戶的最高品質,我們的成長來自於你的推薦。

目前百公里油耗為8。5L左右,表現一般。車主一購買車型: 2017款 1。5L 手動豪華型裸車價格: 7。00萬滿意的地方:改款之後,尤其是換標之後,覺得比老款好看多了。作為一名手動擋的老司機,當時直接就選擇了1。5L手動擋最低配,但是發現最低配連ESp都沒有,覺得還是安全最重要就選擇了次低配。

瑞風S3的九月份銷量為21888輛,作為一款自主小型SUV,這樣的表現確實很不錯。同時也有很多朋友問到這款車,那麼我們就來看看那車主如何評價S3。

江淮汽車-瑞風S3

指導價:6.58-9.58萬

長寬高(新老款有所不同):

4345*1765*1615mm

4345*1765*1640mm

4325*1765*1660mm

軸距:2560mm

動力系統:

1.5L 113馬力/1.6L 120馬力+6擋手動/CVT

車主一

購買車型: 2017款 1.6L CVT豪華智能型

裸車價格: 8.78萬

滿意的地方:我屬於“外貌協會”的,雖然有人覺得S3不好看,但是我自己覺得好看就可以了。尺寸要比同級別的小型SUV大不少,同時車內空間也比較大,家人坐在後排不會感到擁擠,同時舒適性也不錯。 動力要比老款的1.5L好多了,雖然沒有推背感吧,但是家用還是足夠了,同時CVT很平順,幾乎感覺不到換擋。

但是前排側氣囊、前/後排頭部氣囊、天窗都要選裝,因為是新款的緣故,所以優惠比較少,性價比只能說是一般吧,不能說太高,

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

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

節能減碳愛地球是景泰電動車的理念,是創立景泰電動車行的初衷,滿意態度更是服務客戶的最高品質,我們的成長來自於你的推薦。

透過選單樣式的調整、圖片的縮放比例、文字的放大及段落的排版對應來給使用者最佳的瀏覽體驗,所以不用擔心有手機版網站兩個後台的問題,而視覺效果也是透過我們前端設計師優秀的空間比例設計,不會因為畫面變大變小而影響到整體視覺的美感。

如果能優惠5000以上性價比就凸顯出來了。目前百公里油耗為8.5L左右,表現一般。

車主一

購買車型: 2017款 1.5L 手動豪華型

裸車價格: 7.00萬

滿意的地方:改款之後,尤其是換標之後,覺得比老款好看多了。作為一名手動擋的老司機,當時直接就選擇了1.5L手動擋最低配,但是發現最低配連ESp都沒有,覺得還是安全最重要就選擇了次低配。配置還算將就,肯定比合資車強多了。打算過段時間裝上仿皮座椅和中控屏,這樣看起來就明顯上檔次了,不過好在配備了日間行車燈。有人說動力不足,但是我覺得動力足夠了,只要選擇合適的擋位,用力踩油門就是了,動力肯定不能飈車,但是家用肯定足夠了。

油耗目前為7L多,表現很不錯,不過新車價格幾乎沒有優惠導致心裏很不爽。另外噪音也有點大。

編輯總結:由於新款的S3剛上市,優惠很少,所以並不建議現在就出手,在等段時間優惠肯定會多起來的。不過S3的價格也算比較實惠,配置還可以,質量也不錯,口碑很好,也是一款值得推薦的SUV。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

搬家費用:依消費者運送距離、搬運樓層、有無電梯、步行距離、特殊地形、超重物品等計價因素後,評估每車次單

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

搬家費用:依消費者運送距離、搬運樓層、有無電梯、步行距離、特殊地形、超重物品等計價因素後,評估每車次單

跨11國、7000公里 「天鵝人」乘飛行傘追候鳥遷徙 新任務將跟飛魚鷹_網頁設計公司

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

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

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

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

網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

紐西蘭外海領航鯨擱淺 保育人士搶救總動員_網頁設計公司

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

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

摘錄自2020年10月17日中央通訊社紐西蘭報導

紐西蘭科羅曼德爾半島(Coromandel Peninsula)沿海今(17日)傳出鯨魚擱淺受困,保育人士動員搶救。海洋保育團體喬納計畫(Project Jonah)發言人表示:「發現約有40隻鯨魚,而很不幸有25隻擱淺。」

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

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

成年的領航鯨(pilot whale)身體可以長達6公尺以上。領航鯨經常傳出擱淺受困的消息,上月澳洲才發生超過376頭領航鯨擱淺喪命。當時約470頭鯨魚在塔斯馬尼亞州(Tasmania)西部崎嶇海岸的偏遠港口擱淺,這可能是澳洲史上最大規模鯨魚擱淺事件。

海洋
國際新聞
紐西蘭
領航鯨
擱淺
鯨豚擱淺

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

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

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

疑似小米手環 6 規格與新功能現身!加入血氧飽和偵測、GPS、更多運動模式_網頁設計公司

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

網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

現在基本上每一年,小米都會更新旗下非常受歡迎的小米手環系列,今年沒意外應該有機會看到小米手環 6,而離小米手環 5 發表時間也有半年左右,最近終於有相關消息出現了!外媒從一款智慧手環 App 程式碼中,發現一個設備型號「XMSH16HM」疑似是小米手環 6,內容還透露一些規格與新功能,像是 GPS 與血氧濃度偵測等等,有興趣深入瞭解的人,他們也有把文件分享出來。

疑似小米手環 6 規格與新功能現身

根據外媒 LOGGER 報導,近日他們在 Zepp 智慧手環 App 的程式碼中,找到一個以 Pangu 作為代號的設備,型號則是 「XMSH16HM」,韌體文件也顯示 Pangu 是 Mi Smarrt Band 6 的代碼:

除了 XMSH16HM 之外,還能找到另一個 XMSH15HM 的型號,看起來應該是有沒有 NFC 的差別:

功能與規格部分,程式碼中顯示這款設備將會搭載 GPS 功能,另外還有 SpO2 血氧濃度偵測,可說讓人相當期待:

另外錶盤與一些圖示看起來都會重新設計,下面幾個是新款小米手環出現的新動畫:

小米手環 6 的錶盤寬度似乎是 152px,高度則介於 360px 至 370px 之間,因此預計錶盤預覽圖片會比小米手環 5 還要大:

從資源文件中還發現到,小米手環 6 已經有 308 個表情符號,意味著未來可能不用再自行安裝任何東西,原生就支援顯示表情符號:

LOGGER 也提到,跟小米手環 5 相比,新款小米手環更多應用都會有自己的通知圖示:

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

台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

功能圖示:

小米手環 5 已經提供高達 11 種運動模式,但從這份文件的運動圖示來看,小米手環 6 似乎會再增加:

Zepp 是由華米開發的智慧手環 App,看起來可信度相當高,LOGGER 也有把文件分享出來,有興趣的人可以點我跳轉。不過畢竟只是程式碼,再加上離小米手環 6 可能推出還有半年時間,功能與規格還是有可能會變動,未來有任何新消息我們也會隨時追蹤。

資料來源:LOGGER

千元有找小米手環 5 開箱實測,涵蓋 11 種運動模式、多項健康功能再升級

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

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

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

Sony Mobile 全新 Xperia Compact 小尺寸手機回歸?爆料大神釋出高清晰渲染圖_網頁設計公司

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

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

去年, Apple 在 iPhone 12 系列中推出小尺寸的 iPhone 12 mini 以滿足喜好小尺寸手機需求的使用者需求。回顧 2018 年 Sony Mobile 曾推出 Xperia XZ2 Compact ,但後續在 Android 陣營的手機這方面,大螢幕、大尺寸手機已成為主流,已經許久未見到有品牌推出尺寸方便單手持握的小尺寸旗艦 Android 手機。
這些年一直謠傳 Sony Mobile 可能再次推出小尺寸手機,現在根據 OnLeaks 的爆料, Xperia Compact 系列很可能在 2021 年復活。

▲圖片來源:Steve Hemmerstoffer(Voice/OnLeaks)

Sony Mobile 全新 Xperia Compact 小尺寸手機回歸?爆料大神釋出高清晰渲染圖

這些年來,市場不時會傳聞 Sony Mobile 可能再次將旗下 Xperia Compact 系列小尺寸手機再次回歸。在兩個月前,日本部落格 AndroidNext 報導 Xperia Compact 系列可能會在 2021 年「復活」。稍早,爆料大神 OnLeaks 也據稱取得獨家消息指出 Sony Mobile 確實將推出新款小尺寸智慧型手機。
雖然目前無法得知這款新機的正確名稱為何,不過 OnLeaks 已釋出大量關於這款新機的外觀渲染圖。傳聞這款 Xperia Compact 手機將採用 5.5 吋螢幕,機身尺寸僅有 140*68.9*8.9mm ,不過仍比 5.4 吋的 iPhone 12 mini 的 131.5*64.2*7.4mm 略大一些。

▲圖片來源:Steve Hemmerstoffer(Voice/OnLeaks)

傳聞這款新機將採用平面顯示螢幕和底部邊框帶有些「份量」的下巴,螢幕前置鏡頭採用水滴螢幕設計,配備 800 萬像素自拍鏡頭,機身背面謠傳將配備 1300 萬像素雙鏡頭主相機。

▲圖片來源:Steve Hemmerstoffer(Voice/OnLeaks)

音量鍵設置於機身左側,同側還可見到實體快門鍵和結核電容式指紋感應器的電源鍵,SIM 卡槽則設計在機身另一側。在機身頂部可見到 3.5mm 耳機插孔,底部則有立體聲揚聲器和 USB Type-C 接口。

▲圖片來源:Steve Hemmerstoffer(Voice/OnLeaks)

▲圖片來源:Steve Hemmerstoffer(Voice/OnLeaks)

消息來源:Steve H.McFly(Twitter/@OnLeaks)|Steve Hemmerstoffer(Voice/OnLeaks)

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

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

延伸閱讀:
Sony Mobile 中階新機 Xperia 10 III 高清晰渲染圖曝光:外型與前代相似、仍將保留3.5mm耳機孔

OPPO Find X3 Lite 完整實機開箱照洩漏!只是外觀有點眼熟?

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

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

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!