5.機器學習之朴素貝葉斯詳解

来源:https://www.cnblogs.com/bonheur/archive/2020/03/18/12469873.html
-Advertisement-
Play Games

本篇博客主要詳細介紹朴素貝葉斯模型。首先貝葉斯分類器是一類分類演算法的總稱,這類演算法均以貝葉斯定理為基礎,故統稱為貝葉斯分類器。而朴素貝葉斯分類器是貝葉斯分類器中最簡單,也是最常見的一種分類方法。並且,朴素貝葉斯演算法仍然是流行的十大挖掘演算法之一,該演算法是有監督的學習演算法,解決的是分類問題。該演算法的優點 ...


本篇博客主要詳細介紹朴素貝葉斯模型。首先貝葉斯分類器是一類分類演算法的總稱,這類演算法均以貝葉斯定理為基礎,故統稱為貝葉斯分類器。而朴素貝葉斯分類器是貝葉斯分類器中最簡單,也是最常見的一種分類方法。並且,朴素貝葉斯演算法仍然是流行的十大挖掘演算法之一,該演算法是有監督的學習演算法,解決的是分類問題。該演算法的優點在於簡單易懂、學習效率高、在某些領域的分類問題中能夠與決策樹、神經網路相媲美。但由於該演算法以自變數之間的獨立(條件特征獨立)性和連續變數的正態性假設為前提(這個假設在實際應用中往往是不成立的),就會導致演算法精度在某種程度上受影響。

朴素貝葉斯法是基於貝葉斯定理與特征條件獨立假設的分類方法,是經典的機器學習演算法之一。最為廣泛的兩種分類模型是決策樹(Decision Tree Model)和朴素貝葉斯模型(Naive Bayesian Model,NBM)。和決策樹模型相比,朴素貝葉斯分類器(Naive Bayes Classifier 或 NBC)發源於古典數學理論,有著堅實的數學基礎,以及穩定的分類效率。同時,NBC模型所需估計的參數很少,對缺失數據不太敏感,演算法也比較簡單。理論上,NBC模型與其他分類方法相比具有最小的誤差率。

歷史背景解讀:

18世紀英國數學家托馬斯·貝葉斯(Thomas Bayes,1702~1761)提出過一種看似顯而易見的觀點:“用客觀的新信息更新我們最初關於某個事物的信念後,我們就會得到一個新的、改進了的信念。”這個研究成果由於簡單顯得平淡無奇,直至他死後兩年才於1763年由他的朋友理查德·普萊斯幫助發表。它的數學原理很容易理解,簡單說就是,如果你看到一個人總是做一些好事,則會推斷那個人多半會是一個好人。這就是說,當你不能準確知悉一個事物的本質時,你可以依靠與事物特定本質相關的事件出現的多少去判斷其本質屬性的概率。用數學語言表達就是:支持某項屬性的事件發生得愈多,則該屬性成立的可能性就愈大。與其他統計學方法不同,貝葉斯方法建立在主觀判斷的基礎上,你可以先估計一個值,然後根據客觀事實不斷修正。

1774年,法國數學家皮埃爾-西蒙·拉普拉斯(Pierre-Simon Laplace,1749-1827)獨立地再次發現了貝葉斯公式。拉普拉斯關心的問題是:當存在著大量數據,但數據又可能有各種各樣的錯誤和遺漏的時候,我們如何才能從中找到真實的規律。拉普拉斯研究了男孩和女孩的生育比例。有人觀察到,似乎男孩的出生數量比女孩更高。這一假說到底成立不成立呢? 拉普拉斯不斷地搜集新增的出生記錄,並用之推斷原有的概率是否準確。每一個新的記錄都減少了不確定性的範圍。拉普拉斯給出了我們現在所用的貝葉斯公式的表達:

   

該公式表示在B事件發生的條件下A事件發生的條件概率,等於A事件發生條件下B事件發生的條件概率乘以A事件的概率,再除以B事件發生的概率。公式中,P(A)也叫做先驗概率,P(A/B)叫做後驗概率。嚴格地講,貝葉斯公式至少應被稱為“貝葉斯-拉普拉斯公式”。

貝葉斯學派很古老,但是從誕生到一百年前一直不是主流。主流是頻率學派。頻率學派的權威皮爾遜和費歇爾都對貝葉斯學派不屑一顧,但是貝葉斯學派硬是憑藉在現代特定領域的出色應用表現為自己贏得了半壁江山。貝葉斯學派的思想可以概括為先驗概率+數據=後驗概率。也就是說我們在實際問題中需要得到的後驗概率,可以通過先驗概率和數據一起綜合得到。數據大家好理解,被頻率學派攻擊的是先驗概率,一般來說先驗概率就是我們對於數據所在領域的歷史經驗,但是這個經驗常常難以量化或者模型化,於是貝葉斯學派大膽的假設先驗分佈的模型,比如正態分佈,beta分佈等。這個假設一般沒有特定的依據,因此一直被頻率學派認為很荒謬。雖然難以從嚴密的數學邏輯里推出貝葉斯學派的邏輯,但是在很多實際應用中,貝葉斯理論很好用,比如垃圾郵件分類,文本分類。

概率基礎:

條件概率是指事件A在另外一個事件B已經發生條件下的發生概率。 條件概率表示為: P(A|B), 讀作“在B條件下A的概率”。若只有兩個事件A, B, 那麼:

 

 

 

概念:

先驗概率:是指根據以往經驗和分析得到的概率。例如如果我們對西瓜的色澤、根蒂和紋理等特征一無所知,按照常理來說,西瓜是好瓜的概率是60%。那麼這個概率P(好瓜)就被稱為先驗概率。

後驗概率:事情已經發生,要求這件事情發生的原因是由某個因素引起的可能性的大小。例如假如我們瞭解到判斷西瓜是否好瓜的一個指標是紋理。一般來說,紋理清晰的西瓜是好瓜的概率大一些,大概是75%。如果把紋理清晰當作一種結果,然後去推測好瓜的概率,那麼這個概率P(好瓜|紋理清晰)就被稱為後驗概率。後驗概率類似於條件概率(紋理清晰的條件下是好瓜的概率)。

聯合概率:設二維離散型隨機變數(X,Y)所有可能取得值為,記則稱 為隨機變數X和Y的聯合概率。計算如下:

例:在買西瓜的案例中,P(好瓜,紋理清晰)稱為聯合分佈,它表示紋理清晰且是好瓜的概率。關於它的聯合概率,滿足以下乘法等式:

其中,P(好瓜|紋理清晰)就是後驗概率,表示在“紋理清晰”的條件下,是“好瓜”的概率。P(紋理清晰|好瓜)表示在“好瓜”的情況下,是“紋理清晰”的概率。

 

貝葉斯定理:

 (註:P(x,c)=P(x│c)P(c))

 

 

 

後驗概率P(c∣x),在現實任務中通常難以直接獲得。所要實現的是基於有限的訓練樣本集儘可能準確地估計出後驗概率P(c│x)。有兩種策略:直接建模P(c∣x)來預測c,“判別式模型”;對聯合概率分佈P(x,c)P(x,c)P(x,c)建模,然後再由此獲得P(c|x),“生成式模型”。Fisher判別式、支持向量機等,都可歸入判別式模型的範疇。

對生成式模型(貝葉斯分類器):對於每個特征x,我們想要知道樣本在這個特性x下屬於哪個類別,即求後驗概率P(c|x)最大的類標記。這樣基於貝葉斯公式,可以得到:

P(c)是類“先驗”概率,P(x|c)是樣本x相對於類標記c的類條件概率,或稱似然。p(x)是用於歸一化的“證據”因數,對於給定樣本x,證據因數p(x)與類標記無關,即在下麵的示例中分母不做處理。於是,估計p(c|x)的問題變為基於訓練數據來估計先驗P(c)和似然P(x∣c),對於條件概率p(x|c)來說,它涉及x所有屬性的聯合概率。P(c)可通過各類樣本出現的頻率來進行估計。

 

逆概:(考慮事件)

貝葉斯分類器就是一種分類的方法,而且是一種基於貝葉斯原理,對聯合概率分佈p(x,c)建模,之後由條件概率公式得出後驗概率的生成式模型的方法 。因為後驗概率P(c∣x),在現實任務中通常難以直接獲得,所以朴素貝葉斯可以理解為求 "逆概" 。

例如:一座別墅在過去的 20 年裡一共發生過 2 次被盜,別墅的主人有一條狗,狗平均每周晚上叫 3 次,在盜賊入侵時狗叫的概率被估計為 0.9,問題是:在狗叫的時候發生入侵的概率是多少?

假設 A 事件為狗在晚上叫,B 為盜賊入侵。

事件A(狗叫):P(A) = 3/7

事件B(被偷):P(B) = 2/(365*20+4)

盜賊入侵時狗叫的概率被估計為 0.9(先偷後叫):P(A|B) = 0.9

考慮事件(反過來,逆概):P(B|A) = P(A|B) * P(B) / P(A) = 0.9* (2/(365*20+4)) / (3/7)  = 0.000575

 

極大似然估計:

估計類條件概率的一種常用策略是先假定其具有某種確定的概率分佈形式,再基於訓練樣本對概率分佈的參數進行估計。

假設P(x∣c)具有確定的形式並且被參數向量θc唯一確定,則我們的任務就是利用訓練集D估計參數θc,我們將P(x|c)記為P(x∣θc)

參數估計有兩個學派:

1)頻率主義學派:認為參數雖然未知,但卻是客觀存在的固定值,可通過優化似然函數等準則來確定參數值。經典的方法:極大似然估計。

2)貝葉斯學派:認為參數是未觀察到的隨機變數, 可假定參數服從一個先驗分佈,然後基於觀測到的數據來計算參數的後驗分佈。

Dc表示訓練集D中第c類樣本組成的集合,假設這些樣本是獨立同分佈的,則參數θc對於數據集Dc的似然是:

同時發生,因此連乘,對θc進行極大似然估計,就是去尋找能最大化似然P(Dc∣θc)的參數值θc,直觀上看,極大似然估計是試圖在θc所有可能的取值中,找到一個能使數據出現的“可能性”最大的值。

上式的連乘操作易造成下溢,通常使用對數似然:

連乘轉換為連加,更好處理。此時參數θc 的極大似然估計為:

在連續屬性情形下,假設概率密度函數,則參數和的極大似然估計為:

 

似然函數 L(x;θ)L(x;θ)L(x;θ)在形式上,其實就是樣本的聯合密度。把x1,x2,x3,…,xn看作常數,而把待定參數θ0,θ1,…,θn看作 L 的自變數。對連續型總體X 和離散型隨機變數X,樣本的似然函數分別是概率密度和分佈率的連乘形式。

 

朴素貝葉斯演算法:

是在貝葉斯演算法的基礎上進行了相應的簡化,即假定給定目標值時屬性之間相互條件獨立。也就是說沒有哪個屬性變數對於決策結果來說占有著較大的比重,也沒有哪個屬性變數對於決策結果占有著較小的比重。雖然這個簡化方式在一定程度上降低了貝葉斯分類演算法的分類效果,但是在實際的應用場景中,極大地簡化了貝葉斯方法的複雜性。在所有的機器學習分類演算法中,朴素貝葉斯和其他絕大多數的分類演算法都不同。對於大多數的分類演算法,比如決策樹,KNN,邏輯回歸,支持向量機等,他們都是判別方法,也就是直接學習出特征輸出Y和特征X之間的關係,要麼是決策函數Y=f(X),要麼是條件分佈P(Y|X)。但是朴素貝葉斯卻是生成方法,也就是直接找出特征輸出Y和特征X的聯合分佈P(X,Y),然後用P(Y|X)=P(X,Y)/P(X)得出。

基於貝葉斯公式來估計後驗概率P(c∣x)的主要困難:類條件概率P(x∣c)是所有屬性上的聯合概率,難以從有限的訓練樣本直接估計而得。朴素貝葉斯分類器採用了“屬性條件獨立性假設”:假設所有屬性相互獨立。基於屬性條件獨立性假設,貝葉斯公式可重寫為:

其中,d為屬性數目,xi為x在第i個屬性上的取值。由於對於所有的類別p(x)相同,即對於同一個樣本而言P(x)都是一樣的,對分類結果沒有什麼影響,為了提高運行效率,我們在計算時可以不考慮證據因數P(x)。最大化後驗概率便轉化為了最大化似然與先驗的乘積。基於上式的貝葉斯判定准則有:

 

這就是朴素貝葉斯分類器的表達式。朴素貝葉斯分類器的訓練過程就是基於訓練集D來估計類先驗概率P(c),併為每個屬性估計條件概率P(xi∣c)

類先驗概率:若Dc表示訓練集D中第c類樣本組成的集合,若有充足的獨立同分佈樣本,則可容易的估計出來類先驗概率

 對於離散屬性而言,Dc,xi表示第c類第i個屬性上取值為xi的樣本,則條件概率P(xi∣c)可估計為:

cc

對於連續屬性可考慮為概率密度函數,假定  分別是第c類樣本在第i個屬性上取值的均值和方差,則有:

對於朴素貝葉斯還需要說明的一點是:若某種屬性值在訓練集中沒有與某個類同時出現過,則直接基於概率估計公式得出來概率為0,再通過各個屬性概率連乘式計算出的概率也為0,這就導致沒有辦法進行分類了,所以,為了避免屬性攜帶的信息被訓練集未出現的屬性值“抹去”,在估計概率值時通常要進行“平滑”,常用“拉普拉斯修正”,具體來講,令N表示訓練集D中可能的類別數,Ni表示第i個屬性可能的取值數。

 

拉普拉斯修正避免了樣本不充分而導致概率估計為零的問題,並且在訓練集樣本變大的時候,修正過程所引入的先驗的影響也會逐漸變得可忽視,使得估計值越來越接近實際概率值。

 

案例分析1:

給定如下數據:

根據以上數據,現在有一對男女朋友,男生向女生求婚,男生的四個特點分別是不帥,性格不好,身高矮,不上進,請判斷女生是嫁還是不嫁?

該問題轉換為數學問題就是比較,該問題轉換為數學問題就是比較:P( 嫁 | 不帥,性格不好,身高矮,不上進 ) 與 P( 不嫁 | 不帥,性格不好,身高矮,不上進 ) 的概率。

由貝葉斯公式得:

 假設各個特征相互獨立,即:

 或者(其實沒區別):

首先我們整理訓練數據中:嫁的樣本數總共有6個,則 P(嫁) = 6 / 12 = 1 / 2;不帥,也嫁了的樣本數總共有6個,則 P(不帥 | 嫁) = 3 / 6 = 1 / 2;   性格不好,也嫁了的樣本數總共有1個,則 P(性格不好 | 嫁) = 1 / 6  ;身高矮,也嫁了的樣本數總共有1個,則 P(身高矮 | 嫁) = 1 / 6 ;不上進,也嫁了的樣本數總共有1個,則 P(不上進 | 嫁) = 1 / 6 ;

 

同理:

不嫁的樣本數總共有6個,則 P(不嫁) = 6 / 12 = 1 / 2;不帥,就不嫁的樣本數總共有1個,則 P(不帥 | 不嫁) = 1 / 6;性格不好,就不嫁的樣本數總共有3個,則P(性格不好 | 不嫁) = 3 / 6 = 1 / 2;   身高矮,就不嫁的樣本數總共有6個,則P(身高矮 | 不嫁) = 6 / 6 = 1;不上進,就不嫁的樣本數總共有3個,則P(不上進 | 不嫁) = 3 / 6 = 1 / 2;由於分母都相同,且分子(1 / 864) < (1 / 48) ,所以最後得出的結論是該女生不嫁給這個男生。

到此應該能整明白貝葉斯演算法是原理了,如果還沒整明白,沒關係,再來看一個例子。

案例解析2:

用西瓜數據集訓練一個朴素貝葉斯分類器,進行分類:

對下表示例進行預測:

 

 1. 求出先驗概率P(c)

 2. 求出每個屬性估計條件概率P(xi∣c):

     離散屬性:

     連續屬性:

3. 最大化後驗概率,即計算先驗與類條件概率的乘積,數值大的對應的分類為分類結果。即採用朴素貝葉斯分類器的方法,假設各屬性之間相互獨立;不考慮證據因數P(x),轉化為: P(c∣x)=P(x∣c)P(c);最大化後驗概率便轉化為了最大化似然與先驗的乘積,maxP(x∣c)P(c)轉化為:

 

 

4. 預測結果,由計算結果可知,由於0.038>6.80×10−5,即P(好瓜=是)>P(好瓜=否),此瓜更有可能是好瓜,因此朴素貝葉斯分類器將測試樣本“測1”判別為“好瓜”。

5. 拉普拉斯修(補充)

 

朴素貝葉斯演算法實現原理總結:

貝葉斯分類器目的就是分類,即判斷含有屬性x的樣本屬於哪一類,也就是判斷後驗P(c│x)在不同的類別時概率的大小,後驗概率越大說明所屬的類別越有可能是正確的類別。因此,我們的目標就轉化為了最大化後驗概率,然後將後驗概率最大的類別判定為該樣本所屬的類別。例如:maxP(c∣x)=P(c2∣x)則x屬於c2。對於同一個樣本而言P(x)都是一樣的,對分類結果沒有什麼影響,為了提高運行效率,我們在計算時可以不考慮證據因數P(x)。最大化後驗概率便轉化為了最大化似然與先驗的乘積。則P(c∣x)=P(x∣c)P(c)/P(x)​ ,在不考慮P(x)後轉化為: P(c∣x)=P(x∣c)P(c)。

 

朴素貝葉斯的優缺點:
優點:

1. 對小規模的數據表現很好,適合多分類任務,適合增量式訓練,尤其是數據量超出記憶體時,我們可以一批批的去增量訓練;

2. 對缺失數據不太敏感,演算法也比較簡單,常用於文本分類;

3. 發源於古典數學理論,有著堅實的數學基礎,以及穩定的分類效率,當數據呈現不同的特點時,分類性能不會有太大的差異,健壯性好;

4. 當數據集屬性之間的關係相對比較獨立時,朴素貝葉斯分類演算法會有較好的效果。
缺點:

1. 對輸入數據的表達形式很敏感(離散、連續,值極大極小之類的);

2. 需要知道先驗概率,且先驗概率很多時候取決於假設,假設的模型可以有很多種,因此在某些時候會由於假設的先驗模型的原因導致預測效果不佳;

3. 由於我們是通過先驗和數據來決定後驗的概率從而決定分類,所以分類決策存在一定的錯誤率;

4. 理論上,朴素貝葉斯模型與其他分類方法相比具有最小的誤差率。但是實際上並非總是如此,這是因為朴素貝葉斯模型給定輸出類別的情況下,假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,在屬性個數比較多或者屬性之間相關性較大時,分類效果不好。而在屬性相關性較小時,朴素貝葉斯性能最為良好。對於這一點,有半朴素貝葉斯之類的演算法通過考慮部分關聯性適度改進。

 

補充:

1)半朴素貝葉斯分類器:(詳細內容待總結)在朴素的分類中, 我們假定了各個屬性之間的獨立,這是為了計算方便,防止過多的屬性之間的依賴導致的大量計算。這正是朴素的含義,雖然朴素貝葉斯的分類效果不錯,但是屬性之間畢竟是有關聯的, 某個屬性依賴於另外的屬性, 於是就有了半朴素貝葉斯分類器。

 2)朴素貝葉斯與LR的區別?簡單來說:朴素貝葉斯是生成模型,根據已有樣本進行貝葉斯估計學習出先驗概率P(Y)和條件概率P(X|Y),進而求出聯合分佈概率P(XY),最後利用貝葉斯定理求解P(Y|X), 而LR是判別模型,根據極大化對數似然函數直接求出條件概率P(Y|X);朴素貝葉斯是基於很強的條件獨立假設(在已知分類Y的條件下,各個特征變數取值是相互獨立的),而LR則對此沒有要求;朴素貝葉斯適用於數據集少的情景,而LR適用於大規模數據集。

3)在估計條件概率P(X|Y)時出現概率為0的情況怎麼辦?簡單來說:引入λ,當λ=1時稱為拉普拉斯平滑。

4)一句話概況朴素貝斯:是一個生成模型(很重要),其次它通過學習已知樣本,計算出聯合概率,再求條件概率。

5)生成模式和判別模式的區別:生成模式:由數據學得聯合概率分佈,求出條件概率分佈P(Y|X)的預測模型;常見的生成模型有:朴素貝葉斯、隱馬爾可夫模型、高斯混合模型、文檔主題生成模型(LDA)、限制玻爾茲曼機。判別模式:由數據學得決策函數或條件概率分佈作為預測模型;常見的判別模型有:K近鄰、SVM、決策樹、感知機、線性判別分析(LDA)、線性回歸、傳統的神經網路、邏輯斯蒂回歸、boosting、條件隨機場。

 

 

 參考文章:

 1. https://blog.csdn.net/ch18328071580/article/details/94407134

 2. https://blog.csdn.net/yangjingjing9/article/details/79986371

 3. https://www.cnblogs.com/pinard/p/6069267.html

 4. https://blog.csdn.net/sinat_30353259/article/details/80932111

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • [toc] 領域驅動設計 非原創,感謝《領域驅動設計》這本書 有很多因素會使軟體開發複雜化,但最根本的原因是問題領域本身錯綜複雜。如果你要為一家人員複雜的企業提高自動化程度,那麼你開發的軟體將無法迴避這種複雜性,你所能做的只有控制這種複雜性。控制複雜性的關鍵是有一個好的領域模型,這個模型不應該僅僅停 ...
  • 北航OO(2020)第一單元博客作業 [TOC] 基於度量的程式結構分析 Homework 1 代碼度量 | Method | CONTROL | ev\(G\) | iv\(G\) | LOC | v\(G\) | | | | | | | | | "Expression\.Expression\( ...
  • GoF的23種設計模式分類和功能 一、分類 範圍\目的 創建型模型 結構型模型 行為型模型 類模式 工廠方法 (類)適配器 模版方法、解釋器 對象模式 單例 原型 抽象工廠 建造者 代理 (對象)適配器 橋接 裝飾 外觀 享元 組合 策略 命令 職責聯 狀態 觀察者 中介者 訪問者 迭代器 備忘錄 ...
  • 引子 先介紹幾個概念,同步一下認知: 容災:是指系統冗餘部署,當一處由於意外停止工作,整個系統應用還可以正常工作。 容錯:是指在運行中出現錯誤(如上下游故障或概率性失敗)仍可正常提供服務。 可用性:描述的是系統可提供服務的時間長短。用公式來說就是A=MTBF/(MTBF+MTTR),即正常工作時間/ ...
  • 簡介: Java web項目中,在後端隨機生成一個驗證碼,繪製成圖像,併在圖像上添加兩條幹擾線,發送到瀏覽器,供用戶使用。 本片博文內容包括,功能實現的邏輯步驟,Java實現代碼,生成的驗證碼圖片展示。 步驟一:生成一個包含四個字元的字元串 使用一個數組char[]+一個Random對象實現該功能。 ...
  • 1.模型管理 :web線上流程設計器、預覽流程xml、導出xml、部署流程 2.流程管理 :導入導出流程資源文件、查看流程圖、根據流程實例反射出流程模型、激活掛起 3.運行中流程:查看流程信息、當前任務節點、當前流程圖、作廢暫停流程、指派待辦人 4.歷史的流程:查看流程信息、流程用時、流程狀態、查看 ...
  • oracle的jdk下載需要登錄,https://blog.csdn.net/qq_40298231/article/details/98485608 安裝JDK,傻瓜式操作 配置環境變數 右擊“我的電腦”-->"屬性"-->"高級系統設置"-->"高級"-->"環境變數" 在系統變數里新建"JAV ...
  • 一、 1.下載安裝chrome+chrome driver 2.selenium​操作主要分為兩類: (1)得到UI元素 find_element_by_id:通過id值來獲取元素 find_elements_by_name(下麵都同理) find_elements_by_xpath find_el ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...