日本防非洲豬瘟 罰則提高為300萬日圓

摘錄自2020年2月5日民視報導

日本農林水產省表示,要避免非洲豬瘟入境,危害日本養豬和肉品產業,便考慮大幅提高非法攜帶肉品入境的罰則,個人違規將從原本的100萬日圓,提高到300萬日圓,相當於台幣84萬。

而公司法人還一口氣提高50倍,將罰5000萬日圓,約台幣1400萬,相關法案預計在這次會期,提交國會審議。日本海關光是去年10~12月,沒收的違規肉品當中,就有86件驗出非洲豬瘟,當中甚至有部分病毒,仍具有傳染力。

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

【其他文章推薦】

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

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

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

南投搬家前需注意的眉眉角角,別等搬了再說!

CSS(6)—浮動(float)

CSS(6)—通俗講解浮動(float)

CSS有三模塊:盒子模型浮動定位。上篇博客有講到 盒子模型地址:

一、理解浮動

1、概念

概念 浮動可以理解為讓某個div元素脫離標準流,漂浮在標準流之上,和標準流不是一個層次。

如果是第一次聽說肯定還是還是一臉懵,下面我一步一步通過例子來解釋這句話。

舉例說明

我們知道div是塊級元素,在頁面中獨佔一行,自上而下排列,也就是傳說中的標準流

如下圖

可以看出,因為div是塊級元素,所以即使div2的寬度很小,頁面中一行可以容下div2和div3,div3也不會排在div2後邊,因為div元素是獨佔一行的。

那麼我們再看下浮動的作用,這裏我將div2浮動(對div2添加float:left;左浮動屬性)

刷新頁面

通過上下兩張圖片對比,我們可以直觀感覺到,div2有種浮起來的感覺,從之前的平面到立體的感覺。也因為div2浮起來了,那麼它之前所佔的位置也就空出來了,

那麼div3和div4就可以佔據之前div2的位置,所以它們都往上移動了。這樣我們最終看到的效果就是div2和div3,div4有重疊,而且div2是在最上層。

那如果這是我在把div3也設置左浮動呢 (對div3添加float:left;左浮動屬性)

再次刷新頁面

同樣我們可以很直觀的看到,因為div2和div3目前都是左浮動,所以它們的位置都空出來了,這個時候div4就可以往上移動,所以div2和div3都把div4部分給覆蓋了。

通過上面示例,我們應該可以理解什麼是浮動。這裏附上上面示例的代碼,可以自行再研究下

<!DOCTYPE html>
<html> 
<head>
    <title>css浮動</title>
    <style type="text/css">
        div {
           text-align: center;
        }
        .one {
            background-color: gray;
            width: 300px;
            height: 50px;
        }
        .two {
            background-color: yellow;
            width: 100px;
            height: 120px;
            /*float:left;*/
        }
        .three {
            background-color: red;
            width: 150px;
            height: 50px;
            /*float:left;*/ 
        }

        .four {
            background-color: green;
            width: 300px;
            height: 50px;
        }
    </style>
</head>

<body>
    <div class="one"> div1</div>
    <div class="two"> div2</div>
    <div class="three">div3 </div>
    <div class="four"> div4</div>
</body>
</html>

通過上面也可以得出一些結論:

1、假如某個div元素A是浮動的,如果A元素上一個元素也是浮動的,那麼A元素會跟隨在上一個元素的後邊(如果一行放不下這兩個元素,那麼A元素會被擠到下一行);

2、如果A元素上一個元素是標準流中的元素,那麼A的相對垂直位置不會改變,也就是說A的頂部總是和上一個元素的底部對齊。

2、浮動的作用

浮動它主要有兩個作用:1、實現文本圍繞效果2、實現塊級元素在一行显示布局

1)實現文本圍繞效果

示例

<!DOCTYPE html>
<html> 
<head>
    <title>css浮動</title>
    <style type="text/css">
        .father {
            border: 3px solid #005588;
            padding: 1px;
           width: 300px;
        }
        img {
            width: 150px; 
            height: 150px;
            float:left;
        }
    </style>
</head>

<body>
<div class = "father">
    <img src="1.jpeg"/>
    這件衣服價值百萬,奢侈品牌是指服務於奢侈品的品牌。它是品牌等級分類中的最高等級品牌。在生活當中,奢侈品牌享有很特殊的市場和很高的社會地位。在商品分類里,與奢侈品相對應的是大眾商品。奢侈品不僅是提供使用價值的商品,更是提供高附加值的商品。
</div> 
</body>
</html>

運行結果

2)實現塊級元素在一行显示布局

現在很多時候會通過浮動,讓多個div實現一行显示。當然當我們沒有了解浮動之前我們可以通過將塊級元素轉換為行內塊級元素來實現(display: inline-block)。

如圖

這樣確實可以將多個div實現在同一行显示。但這裡會有兩個小問題

 1、我們可以看到div之前會有小縫隙,很難去除。
 2、如果我想讓其中一個div显示在最右邊,實現起來會比較麻煩。

而上面兩個問題可以通過浮動很輕易的解決。

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>cssdiv元素局一行</title>
    <style>
    div {
        display: inline-block;
        width: 120px;
        height: 80px;
        /*float: left;*/
    }
    .one {
        background-color: pink;
    }
    .two {
        background-color: purple;
    }
    .three {
        background-color: red;
            /*float: right;*/
    }
    </style>
</head>
<body>
    <div class="one">div1</div>
    <div class="two">div2</div>
    <div class="three">div3</div>
</body>
</html>

運行結果

很明顯已經解決。

二、浮動語法

1、浮動的語法

在 CSS 中,我們通過 float 屬性實現元素的浮動。float 屬性定義元素在哪個方向浮動。

基本語法格式

選擇器 {float:屬性值;}

屬性值

2、浮動特性

浮動脫離標準流,不佔位置,會影響標準流。浮動只有左右浮動。

注意 浮動的元素總是找理它最近的父級元素對齊。但是不會超出內邊距的範圍。

如圖

浮動特性

1、浮動脫離標準流,不佔位置,會影響標準流。浮動只有左右浮動。
2、加了浮動的元素盒子是浮起來的,漂浮在其他的標準流盒子上面。
3、加了浮動的盒子,不佔位置的,它浮起來了,它原來的位置會給後面標準流的盒子。
4、一個父盒子裏面的子盒子,如果其中一個子級有浮動的,則其他子級都需要浮動。這樣才能一行對齊显示。
5、元素添加浮動后,元素會具有行內塊元素的特性。元素的大小完全取決於定義的大小或者默認的內容多少浮動根據元素書寫的位置來显示相應的浮動。
6、假如在一行之上只有極少的空間可供浮動元素,那麼這個元素會跳至下一行,這個過程會持續到某一行擁有足夠的空間為止。

總結 浮動的目更多的是為了讓多個塊級元素同一行上显示。

參考

1、

2、

3、

4、

你如果願意有所作為,就必須有始有終。(8)

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

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

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

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

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

總結一下 IEnumerable 的例子

本篇將圍繞 《》和《》給出的例子,總結一下對於 IEnumerable 接口的一些使用方法,希望讀者能夠從中獲得一些啟發。

框架類型的迭代

對於一個實現了 IEnumerable 接口的類型來說,開發中最常用的,就是把這個類型的對象放入到 foreach 等循環關鍵詞中進行迭代,遍歷其中的元素進行處理。

這種遍歷通常分為兩種目的:遍歷和查找。

IEnumerable 及其泛型版本 IEnumerable<T> 定義了一個類型的 “可迭代性”。這點很容易理解,系統中的很多集合類型都實現了該接口。

因此這些集合類型均可以採用 foreach 進行迭代遍歷。但是每個集合類型的迭代方式和結果是不完全相同的,這取決於集合本身的特性。例如:

  • List<>Stack<> 和 Queue<> 的迭代的順序不相同,因為數據結構本身要求是不同的
  • ConcurrentDictionary<,> 和 Dictionary<,> 在迭代時的線程安全性是不同的,因為針對線程安全的設計是不同的
  • BlockingCollection.GetConsumingEnumerable 方法返回一個會產生阻塞的消費者對象,

所以,即使都是丟進 foreach,但是效果也是不完全一樣的。使用這些,需要讀者對這些類型本身需要增進了解。

建議讀者在使用框架中實現了 IEnumerable 的類型時,一定要注意迭代的細節,可以通過 MSDN 上的文檔了解其特殊性。

Linq

Linq 是一個說小不小的話題,這裏只是說其中的 Linq To Object 部分內容。

通過 Linq 中提供的一些擴展方法,可以方便的控制對於一個 IEnumerable 對象的迭代方式。通過這些方法的應用,可以在很多時候避免複雜的條件和循環嵌套。

同時,Linq 中抽象的 Func 和 Action,也要求開發人員在平時的編寫過程中注意對於迭代本身的歸類和整理。Where(IsLeapYear) 會比 Where(x=>(x % 4 == 0 && x % 100 != 0) || x % 400 == 0) 來的更加容易閱讀。

設計複雜的數據結構及其迭代算法

除了基礎的數據結構,開發過程中有時需要自定義一些集合類型。這些集合類型需要自己實現一個迭代過程。例如:二叉樹及其遍歷,對列表進行分頁等等。

這些數據結構的迭代通常需要特定算法的支持。

在《》中關於樹的幾個例子便數據此類中。

本地函數

在 C#7.0 引入了之後, IEnumerable 結合本地函數,快速實現自定義迭代過程的奇怪操作也就跟着出現。

通過這種操作可以在一個函數內採用一些以前不容易實現的方式實現一些操作:

  • 將多重循環拉平
  • 將多級條件判斷變為循環判斷
  • 無需創建新的類就能快速生成一個上下文需要的特殊迭代算法

這相關的例子在《》中較多。

按照月老闆的名言:“業務複雜度是不會因為系統設計變化而減少的,它只是從一個地方轉移到了另外的地方。”,我們可以知道,這種寫法其實沒有使得原來就有的判斷和循環變少。只是改變了語法結構。

讀者可以將這種操作作為一種 “語法糖” 進行使用。如果是在團隊項目中,則需要尊重團隊成員的共同意見,因為這種操作並非所有人都願意接受。

當然,這種做法在一些地方會產生好處。例如在將本地函數、IEnumerable 和 Task 相結合的 T10 測試網絡連接 中。這種寫法就減少了傳統寫法中需要創建一個 List 或者 Array 的開銷。

總之,這種寫法,提供了一種新的思路。是否一定要使用,將取決於讀者團隊的接受程度。

異步迭代器

在 C# 8 和 .netcore 3.0 到來的版本中,我們迎接到了 IAsyncEnumerable 接口來實現異步迭代器的功能。

IEnumerable 是同步方法的迭代器,IAsyncEnumerable 可以看做是其異步版本。有了這個接口,那麼在迭代的過程中也可以充分利用 async/await 帶來的編程快感。

本系列中沒有添加這部分的示例,但是主體思路是一致的。

她的出現,只會使得開發者更容易應用以上總結的幾種主要場景。

詳細的例子,可以。

總結

本系列到此便結束了,希望讀者多在實踐中體會以上總結的幾種使用場景。

本系列中的例子已經全部使用  進行了重寫,讀者可以直接在本博客的頁面上運行這些示例。

如果無法正常的展示示例,讀者也可以。

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

【其他文章推薦】

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

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

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

南投搬家前需注意的眉眉角角,別等搬了再說!

雪梨30年最大雨 熄了野火又迎水災

摘錄自2020年2月11日聯合新聞網報導

暴雨10日襲擊澳洲雪梨和新南威爾斯州東岸,是雪梨30年來最大降雨,澳洲當局因此發佈緊急撤離令。這場雨澆熄了自去年十一月開始肆虐的野火,同時給澳洲最大城市雪梨帶來混亂。

澳洲氣象局表示,過去四天內,雪梨降下391.6毫米雨量,到處淹水且交通打結,河水氾濫,超過60間學校關閉,數千人被迫撤離家園,上萬人無電可用。

澳洲氣象局警告,暴雨可能導致新南威爾斯州南岸山洪爆發,並表示可能會有超過每小時90公里的強風。新南威爾斯州鄉村消防局10日表示,大雨澆熄了該州最嚴重的野火火場,這場大火延燒74天,摧毀300多間房舍,燒毀50萬公頃土地。

農夫對降雨表示歡迎,但也認為一場大雨不足以解決三年的乾旱。乾旱和極端氣候,導致澳洲東南部自去年九月以來野火肆虐,造成至少33人死亡,約十億野生動物喪命,2,500多間房舍和1,170萬公頃土地被燒毀。

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

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

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

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

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

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

蘋果電動車核心人物離職 計畫受挫

蘋果為發展電動車計畫,四處挖角人才;如今核心人員Steve Zadesky被爆即將離職,外界認為這將使蘋果電動車計畫受到不小的損失。

Zadesky在蘋果公司任職已超過15年,曾參與過iPhone、iPad等明星產品研發,也開發過許多蘋果的專利。他從2014年起開始帶領蘋果電動車團隊,並從各大車廠延攬人才;對Tesla的挖角更曾讓Elon Musk發下「全世界都知道蘋果在坐電動車」、「(Tesla)東西夠好就不怕(競爭)」等豪語。

根據聯合財經網所整理的綜合外電資料,Zadesky的離職將影響到目前尚未成熟的蘋果電動車產品;但也有人認為,蘋果的資金充足,應該能找到很多適合帶領計畫的人選。

而有消息人士透漏,蘋果電動車相關的自動駕駛車團隊遇到了一些計畫目標上的麻煩,計畫的實際發展與公司的要求之間出現了落差。

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

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

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

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

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

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

豐田出售部分特斯拉股份 將縮減電動車合作

豐田汽車已出售其所持特斯拉的部分股份,表明兩家公司將縮減在電動車開發方面的合作。雖然縮減電動車領域合作,但豐田計畫繼續與特斯拉在插電式混合動力車等領域合作。

豐田於2010年與特斯拉組成資本和業務合作關係,當時向特斯拉投資5000萬美元,截至今年3月31日豐田持有特斯拉約2.4%股份。豐田似乎已在市場上出售所持的部分特斯拉股份,出售比例未予披露。特斯拉的股價較豐田收購其股份時已躍升10倍以上。

特斯拉稍早時宣佈,將在今年內停止為豐田供應電動車使用的鋰電池。

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

【其他文章推薦】

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

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

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

南投搬家前需注意的眉眉角角,別等搬了再說!

陸去年新能源汽車保有量年增1.7倍,純電動車占57%

大陸公安部交管局公布,截至去(2015)年底,大陸機動車保有量達2.79億輛,其中汽車1.72億輛。在新能源汽車部分,截至去年底,大陸新能源汽車保有量已達58.32萬輛,年增169.48%;其中,純電動汽車保有量33.2萬輛,占56.93%,其保有量與2014年相比增幅達317.06%。

  隨著大陸經濟持續發展,民眾購車剛性需求旺盛,汽車保有量繼續呈快速增長趨勢,去年新註冊登記的汽車達2,385萬輛,保有量淨增1,781萬輛,均為歷史最高水準。汽車占機動車的比率迅速提高,近5年汽車占機動車比率從47.06%提高到61.82%。   大陸全國已有40個城市的汽車保有量超過百萬輛,北京、成都、深圳、上海、重慶、天津、蘇州、鄭州、杭州、廣州、西安等11個城市汽車保有量超過200萬輛。   截至去年底,大陸小型載客汽車達1.36億輛,其中,私家車達1.24億輛,占91.53%;與2014年相比,私家車增加1,877萬輛,增長17.77%。全國平均每百戶家庭擁有31輛私家車,北京、成都、深圳等大城市每百戶家庭擁有私家車超過60輛。   (本文內容由授權使用;首圖來源: CC BY 2.0)

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

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

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

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

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

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

北汽新能源將推5款新車 全新品牌「眾創」4月發佈

近日, 北京新能源汽車股份有限公司黨委書記、總經理鄭剛表示,北汽新能源規劃推出5款全新車型,其中全新品牌“眾創”車型將於4月份正式發佈。即將推出的5款車型覆蓋A00級、A0級、A級轎車及A級 SUV 領域。

北汽新能源將推出5款全新車型,其中純電動A級車EU260(續航里程260公里)將於2-3月正式上市,接下來純電動A0級SUV—EX200(續航200公里)將於3-4月登陸市場,其後續推出的高里程版續航可達到300公里。在今年的9-10月份,旗下全新A00級“國民車”將上市,該車將進一步拉低入門售價;今年年底,全新“眾創”品牌旗下車型將上市,進一步豐富產品陣容。2017年,北汽新能源將推出全新D級高性能純電動轎車,其續航里程將超過500公里。

據悉,北汽新能源推動的“眾創”專案,將在4月舉行的北京車展上,正式發佈該品牌LOGO、車型及命名等細節。“眾創”品牌的首款車型將於今年底正式上市,該車將採用超輕量化的全鋁框架車身結構設計。據介紹,北汽新能源將彙集全球“電粉”,全面參與到新產品的名稱定義、標識設計甚至軟硬選裝件的創意開發中,打造全球首款眾創汽車,該項目也將作為北汽新能源“衛藍眾創”計畫一部分。

在北汽新能源的規劃中,在2017年將推出更具產品實力的全新高性能D級純電動轎車,新車也將成為北汽新能源的旗艦產品,其續航里程將達到500公里。從定位來看,該車將與特斯拉MODEL S處同一級別。按照此前消息,北汽新能源與Atieva聯合開展的高性能電動汽車設計研發工作正在矽谷緊鑼密鼓地推進之中,新車有望是該款D級轎車。

多款熱銷車型的出現將促使北汽新能源加快對於產業佈局的建設。據悉,北汽新能源將以“1(北京采育基地)+2(常州基地、青島基地)+I(北汽集團內部傳統乘用車生產基地)+P(社會合作夥伴生產資源)>80”為基礎,在十三五末期形成80萬輛以上生產能力,年產銷50萬輛規模,打造年營業收入600億元、上市市值1000億元的企業。

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

【其他文章推薦】

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

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

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

南投搬家前需注意的眉眉角角,別等搬了再說!

類型擦除真的能完全擦除一切信息嗎?java 泛型揭秘

背景

我們都知道泛型本質上是提供類型的”類型參數”,它們也被稱為參數化類型(parameterized type)或參量多態(parametric polymorphism)。其實泛型思想並不是 Java 最先引入的,C++ 中的模板就是一個運用泛型的例子。

GJ(Generic Java)是對 Java 語言的一種擴展,是一種帶有參數化類型的 Java 語言。用 GJ 編寫的程序看起來和普通的 Java 程序基本相同,只不過多了一些參數化的類型同時少了一些類型轉換。實際上,這些 GJ 程序也是首先被轉化成一般的不帶泛型的 Java 程序后再進行處理的,編譯器自動完成了從 Generic Java 到普通 Java 的翻譯。

 

什麼是真實的java泛型

我們都知道編譯器會進行泛型擦除,編譯器可以在對源程序(帶有泛型的 Java 代碼)進行編譯時使用泛型類型信息保證類型安全,對大量如果沒有泛型就不會去驗證的類型安全約束進行驗證,同時在生成的字節碼當中,將這些類型信息清除掉。下面我們先驗證一下:

public static void main(String[] args) {
 ArrayList<Integer> ints = new ArrayList<Integer>();
 ints.add(1); 
 ints.add(2);
 ints.add(3);
 
 ArrayList<String> sts = new ArrayList<String>();
 sts.add("a");
 sts.add("b");
 sts.add("c");
 
 System.out.println(ints.getClass() == sts.getClass()); 
 }
上面打印的結果是true,原因是:

按照理解,泛型擦除后將不能找回原來的類型,都是Object形式的,真的如此嗎?

看一下如下代碼:

import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;

public class ClassTest {
     public static void main(String[] args) throws Exception {
     ParameterizedType type = (ParameterizedType) 
     Bar.class.getGenericSuperclass();
     System.out.println(type.getActualTypeArguments()[0]);
     
     ParameterizedType fieldType = (ParameterizedType) 
     Foo.class.getField("children").getGenericType();
     System.out.println(fieldType.getActualTypeArguments()[0]);
     
     ParameterizedType paramType = (ParameterizedType) 
     Foo.class.getMethod("foo", List.class)
     .getGenericParameterTypes()[0];
     System.out.println(paramType.getActualTypeArguments()[0]);
     
     System.out.println(Foo.class.getTypeParameters()[0]
     .getBounds()[0]);
     }
     
     class Foo<E extends CharSequence> {
     public List<Bar> children = new ArrayList<Bar>();
     public List<StringBuilder> foo(List<String> foo) {return null; }
     public void bar(List<? extends String> param) {}
     }
     
     class Bar extends Foo<String> {}
    }

打印出

class java.lang.String
class com.javapuzzle.davidwang456.ClassTest$Bar
class java.lang.String
interface java.lang.CharSequence

你會發現每一個類型參數都被保留了,而且在運行期可以通過反射機制獲取到。那麼到底什麼是“類型擦除”?至少某些東西被擦除了吧?是的。事實上,除了結構化信息外的所有東西都被擦除了 —— 這裏結構化信息是指與類結構相關的信息,而不是與程序執行流程有關的。換言之,與類及其字段和方法的類型參數相關的元數據都會被保留下來,可以通過反射獲取到。

參考資料

【1】http://techblog.bozho.net/on-java-generics-and-erasure/

【2】https://www.ibm.com/developerworks/cn/java/j-lo-gj/?mhsrc=ibmsearch_a&mhq=%E7%B1%BB%E5%9E%8B%E6%93%A6%E9%99%A4

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

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

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

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

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

python機器學習——邏輯回歸

我們知道感知器算法對於不能完全線性分割的數據是無能為力的,在這一篇將會介紹另一種非常有效的二分類模型——邏輯回歸。在分類任務中,它被廣泛使用

邏輯回歸是一個分類模型,在實現之前我們先介紹幾個概念:

幾率(odds ratio):
\[ \frac {p}{(1-p)} \]
其中p表示樣本為正例的概率,當然是我們來定義正例是什麼,比如我們要預測某種疾病的發生概率,那麼我們將患病的樣本記為正例,不患病的樣本記為負例。為了解釋清楚邏輯回歸的原理,我們先介紹幾個概念。

我們定義對數幾率函數(logit function)為:
\[ logit(p) = log \frac {p}{(1-p)} \]
對數幾率函數的自變量p取值範圍為0-1,通過函數將其轉化到整個實數範圍中,我們使用它來定義一個特徵值和對數幾率之間的線性關係為:
\[ logit(p(y=1|x)) = w_0x_0+w_1x_1+…+w_mx_m = \sum_i^nw_ix_i=w^Tx \]
在這裏,p(y=1|x)是某個樣本屬於類別1的條件概率。我們關心的是某個樣本屬於某個類別的概率,剛好是對數幾率函數的反函數,我們稱這個反函數為邏輯函數(logistics function),有時簡寫為sigmoid函數:
\[ \phi(z) = \frac{1}{1+e^{-z}} \]
其中z是權重向量w和輸入向量x的線性組合:
\[ z = w^Tx=w_0+w_1x_1+…+w_mx_m \]
現在我們畫出這個函數圖像:

import matplotlib.pyplot as plt
import numpy as np
def sigmoid(z):
    return 1.0 / (1.0 + np.exp(-z))
z = np.arange(-7, 7, 0.1)
phi_z = sigmoid(z)
plt.plot(z, phi_z)
plt.axvline(0.0, color='k')
plt.axhspan(0.0, 1.0, facecolor='1.0', alpha=1.0, ls='dotted')
plt.yticks([0.0, 0.5, 1.0])
plt.ylim(-0.1, 1.1)
plt.xlabel('z')
plt.ylabel('$\phi (z)$')
plt.show()

可以看出當z接近於正無窮大時,函數值接近1,同樣當z接近於負無窮大時,函數值接近0。所以我們知道sigmoid函數將一個實數輸入轉化為一個範圍為0-1的一個輸出。

我們將邏輯函數將我們之前學過的Adaline聯繫起來,在Adaline中,我們的激活函數的函數值與輸入值相同,而在邏輯函數中,激活函數為sigmoid函數。

sigmoid函數的輸出被解釋為某個樣本屬於類別1的概率,用公式表示為:
\[ \hat y=\begin{cases}1,\quad \phi(z)\ge 0.5 \\\\0,\quad otherwise\end{cases} \]
也就是當函數值大於0.5時,表示某個樣本屬於類別1的概率大於0.5,於是我們就將此樣本預測為類別1,否則為類別0。我們仔細觀察上面的sigmoid函數圖像,上式也等價於:
\[ \hat y=\begin{cases}1,\quad z\ge 0.0 \\\\0,\quad otherwise\end{cases} \]
邏輯回歸的受歡迎之處就在於它可以預測發生某件事的概率,而不是預測這件事情是否發生。

我們已經介紹了邏輯回歸如何預測類別概率,接下來我們來看看邏輯回歸如何更新權重參數w

對於Adaline,我們的損失函數為:
\[ J(w) = \sum_i\frac12(\phi(z^{(i)})-y^{(i)})^2 \]
我們通過最小化這個損失函數來更新權重w。為了解釋我們如何得到邏輯回歸的損失函數,在構建邏輯回歸模型時我們要最大化似然L(假設數據集中的所有樣本都是互相獨立的):
\[ L(w)=P(y|x,w)=\prod^n_{i=1}P(y^{(i)}|x^{(i)};w)=\prod^n_{i=1}(\phi(z^{(i)}))^{y^{(i)}}(1-\phi(z^{(i)}))^{1-y^{(i)}} \]
通常我們會最大化L的log形式,我們稱之為對數似然函數
\[ l(w)=logL(w)=\sum_{i=1}^n\left[y^{(i)}log(\phi(z^{(i)})+(1-y^{(i)})log(1-\phi(z^{(i)}))\right] \]
這樣做有兩個好處,一是當似然很小時,取對數減小了数字下溢的可能性,二是取對數后將乘法轉化為了加法,可以更容易的得到函數的導數。現在我們可以使用一個梯度下降法來最大化對數似然函數,我們將上面的對數似然函數轉化為求最小值的損失函數J:
\[ J(w)=\sum_{i=1}^n\left[-y^{(i)}log(\phi(z^{(i)}))-(1-y^{(i)})log(1-\phi(z^{(i)}))\right] \]
為了更清晰的理解上式,我們假設對一個樣本計算它的損失函數:
\[ J(\phi(z),y;w)=-ylog(\phi(z))-(1-y)log(1-\phi(z)) \]
可以看出,當y=0時,式子的第一部分為0,當y=1時,式子的第二部分為0,也就是:
\[ J(\phi(z),y;w)=\begin{cases}-log(\phi(z)),\quad if\ y=1 \\\\-log(1-\phi(z)),\quad if \ y=0\end{cases} \]

可以看出,當我們預測樣本所屬於的類別時,當預測類別是樣本真實類別的概率越大時,損失越接近0,而當預測類別是真實類別的概率越小時,損失越接近無窮大。

作為舉例,我們這裏對權重向量w中的一個分量進行更新,首先我們求此分量的偏導數:
\[ \frac{\partial }{\partial w_j}l(w) = \left(y\frac{1}{\phi(z)}-(1-y)\frac{1}{1-\phi(z)}\right)\frac{\partial }{\partial w_j}\phi(z) \]
在繼續下去之前,我們先計算一下sigmoid函數的偏導數:
\[ \frac{\partial }{\partial z}\phi(z) = \frac{\partial }{\partial z}\frac{1}{1+e^{-z}}=\frac{1}{(1+e^{-z})^2}e^{-z}=\frac{1}{1+e^{-z}}(1-\frac{1}{1+e^{-z}})\\=\phi(z)(1-\phi(z)) \]
現在我們繼續:
\[ \left(y\frac{1}{\phi(z)}-(1-y)\frac{1}{1-\phi(z)}\right)\frac{\partial }{\partial w_j}\phi(z)\\=\left(y\frac{1}{\phi(z)}-(1-y)\frac{1}{1-\phi(z)}\right)\phi(z)(1-\phi(z))\frac{\partial }{\partial w_j}z\\=\left(y(1-\phi(z))-(1-y)\phi(z)\right)x_j\\=(y-\phi(z))x_j \]
所以我們的更新規則為:
\[ w_j = w_j + \eta\sum^n_{i=1}\left(y^{(i)}-\phi(z^{(i)})\right)x_j^{(i)} \]
因為我們要同時更新權重向量w的所有分量,所以我們更新規則為(此處w為向量):
\[ w = w+\Delta w\\\Delta w = \eta\nabla l(w) \]
因為最大化對數似然函數也就等價於最小化損失函數J,於是梯度下降更新規則為:
\[ \Delta w_j=-\eta\frac{\partial J}{\partial w_j}=\eta\sum^n_{i=1}\left(y^{(i)}-\phi(z^{(i)})\right)x^{(i)}_j\\w=w+\Delta w,\Delta w=-\eta \nabla J(w) \]

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

【其他文章推薦】

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

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

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

南投搬家前需注意的眉眉角角,別等搬了再說!