基於C#的機器學習--機器學習的基本知識

来源:https://www.cnblogs.com/wangzhenyao1994/archive/2019/01/05/10223720.html
-Advertisement-
Play Games

機器學習的基本知識 作為一個終生的微軟開發人員,我經常看到開發人員努力尋找解決日常問題所需的資源。讓我們面對現實吧,我們沒有人有時間按照自己喜歡的方式做事,我們中很少有人有幸在真正的研發部門工作。雖然這些年來我們已經走過了相當長的一段旅程,還記得曾經我們通過桌上的C程式員參考資料和其他50本書中翻找 ...


機器學習的基本知識

       作為一個終生的微軟開發人員,我經常看到開發人員努力尋找解決日常問題所需的資源。讓我們面對現實吧,我們沒有人有時間按照自己喜歡的方式做事,我們中很少有人有幸在真正的研發部門工作。雖然這些年來我們已經走過了相當長的一段旅程,還記得曾經我們通過桌上的C程式員參考資料和其他50本書中翻找資料,到現在能夠在谷歌中快速搜索並得到我們想要的東西。但現在人工智慧時代已經到來,情況有些不同了。

       作為c#開發人員,當涉及到機器學習時,谷歌搜索並不總是我們最好的朋友,因為幾乎所有正在使用的東西都是Python, R, MATLABOctave。我們還必須記住,機器學習已經存在很多年了; 只是在最近,美國的企業已經接受了它,我們看到越來越多的人參與其中。

       但是,我的朋友們,毫無疑問,這個世界是一個可怕的地方!c# .NET開發人員該何去何從? 讓我們在下一節開始用一個小故事來回答這個問題,不幸的是,這個故事是千真萬確的。

        在本章中,我們將學習以下主題:

               數據挖掘技術(即指從資料中發掘資訊或知識)

               是購買、構建還是開源

               強化學習

               無監督學習

               監督式學習

               概率和統計

               深度學習

               人工智慧(AI)和生物人工智慧

機器學習概論

       我曾經有一個老闆,我告訴他我正在使用機器學習來發現更多關於我們數據的信息。他的回答是:“你認為你能學到什麼,我不知道!” 如果你在職業生涯中還沒有遇到這樣的情況,那麼恭喜你。如果你有任何職位空缺請告訴我!但你很可能會遇到或者已經遇到了。如果是你你會如何處理呢?而我並沒有因此放棄這件事。

       我:“我們的目標是瞭解更多關於我們所擁有的基金的信息和細節,以及它們如何與用戶的實際情況進行關聯的。

       Boss:“但這些我都知道。機器學習只是一個時髦的詞,它最終都是數據,我們都只是數據管理員。其餘的都是流行語。我們為什麼要這樣做,它最終將如何幫助我。

       我:“我來問你。當你在谷歌中輸入搜索時,你認為會發生什麼?

       Boss看起來有些憤怒。

       Boss:“你想表達什麼?Google當然是拿著我的輸入的內容在網路中尋找與之相似的東西。”

我:“好,那這是怎麼做的呢?”

Boss看起來更憤怒以及有些沮喪。

       Boss:“很顯然它會先在網路中進行搜索,然後將我的輸入和它的搜索結果進行比對。”

我:“但是你有沒有想過這個搜索是如何在其他數十億個搜索中匹配的,以及搜索背後的所有數據是如何不斷更新的?很明顯,人們不能參與其中,否則就無法擴大規模。

       Boss:“當然,演算法經過了很好的調整,給出了我們正在尋找的結果,或者至少給出了建議。

我:“沒錯,正是機器學習做到了這一點。 (不一定,但足夠接近!)

       Boss:“好吧,我不知道我還能從這些數據中學到什麼所以讓我們看看它是怎樣的。

       所以,讓我們做誠實的人。有時候,再多的邏輯也無法覆蓋盲目或抗拒改變的心理,但這個故事的背後,有著與一個無視我們在生物學中所學到的一切的老闆截然不同、更為重要的意義。在機器學習的世界里,要想向那些不像你一樣每天都在開發戰壕里的人證明/展示正在發生的事情、事情是否在工作、它們如何工作、它們為什麼(或為什麼不)工作,等等要難得多。即使那樣,你也很難理解這個演算法在做什麼。

       以下是你在決定機器學習是否適合你時應該問自己的一些問題:

              你只是想順應流行(這可能是真正需要的),還是真的需要這種類型的解決方案?

              你有你需要的資料嗎?

              數據是否足夠清晰以供使用(稍後將詳細介紹)?

              您知道在哪裡以及是否可以獲得可能丟失的數據嗎?更重要的是,您如何知道數據實際上是丟失的?

              你有很多數據還是只有少量數據?

              有沒有另一種已知且經過驗證的解決方案,我們可以用它來代替?

              你知道你想要完成什麼嗎?

              你知道你將如何完成它嗎?

              你將如何向別人解釋?

              當被問到這個問題的時候,你如何能夠證明在幕後發生了什麼?

       這些只是我們在開始機器學習之旅時將共同解決的許多問題中的一部分。

       現在,如果有人能夠執行一個返回多行數據的SQL查詢,他們似乎將稱自己為數據科學家。對於簡歷來說這足夠公平;每個人偶爾都需要鼓勵一下,即使是自己提供的。但他們真的是數據科學家嗎?數據科學家到底是什麼意思?我們真的在做機器學習嗎?這到底意味著什麼?好吧,到這本書的結尾,我們希望能找到所有這些問題的答案,或者至少,創造一個你可以自己找到答案的環境。

       並不是所有人都能在奢華的研究或學術領域工作。我們許多人每天都火要救,正確的解決方案可能只是一個戰術解決方案,必須在2小時內解決。這就是我們c#開發人員所做的。我們整天坐在桌子後面,運氣好的話戴上耳機,不停地打字。但是我們真的能得到我們想要的或者需要的全部時間來按照我們想要的方式開發一個項目嗎?如果我們這樣做了,我們的項目中就不會有我們現在所擁有的那麼多技術債務了,對嗎(您確實跟蹤了您的技術債務,對嗎) ?

       我們需要思考如何才能避免走彎路,有時我們通過思考而不是編碼來做到這一點,尤其是在前期。知識是無價的,因為知識是無法被替代的。但在美國企業中,大多數生產代碼都不是用PythonRMatlabOctave等學術語言編寫的。即使所有的學術財富都是可以得到的,但它們並不是以最適合我們工作的形式得到的。

       在此,讓我們停下來,贊美那些為開源社區做出貢獻的人。正因為有了它們,我們才有了一些優秀的第三方開源解決方案,我們可以利用它們來完成這項工作。開源社區允許我們利用他們所開發的東西,這本書的目的是讓你瞭解其中的一些工具並展示如何使用它們。在這個過程中,我們會試著至少給你們一些你們應該知道的基本的背景知識,這樣一切就不是黑洞對黑盒了!

       你到處都能聽到流行語。我以前每天上下班要花2-4個小時,我不記得我看到過多少廣告牌上面寫著機器學習或人工智慧。它們無處不在,但這一切到底意味著什麼? 人工智慧,機器學習,數據科學,自然語言處理(NLP),數據挖掘,神經元。似乎只要美國公司參與進來,似乎一旦美國企業參與進來,這門曾經完美的藝術就變成了一場混亂的混戰,一項完全不切實際的微觀管理項目。我甚至聽到一位潛在客戶說,我不知道這意味著什麼,但我就是不想被落在後面!

       我們必須做的第一件事是學習處理機器學習項目的正確方法。讓我們從一些定義開始:

       Tom Mitchell將機器學習定義為:

       "A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P if its performance at tasks in T, as measured by P, improves with experience E."

       我們的定義會有一點不同。希望當你被要求為你選擇的道路辯護時,你可以使用它:

       "Machine learning is a collection of techniques which can be used to deal with large amounts of data in the most efficient and effective manner possible, which will derive actionable results and insight for us from that data."

       “機器學習是一組技術的集合,可以用來以最有效的方式處理大量數據,這將為我們從這些數據中獲得可操作的結果和洞察力。

       現在,那些我們稱之為技術的東西呢? 毫無疑問;諸如概率,統計等技術,它們都在那裡,只是被隱藏起來了。我們將要用來執行示例的工具將隱藏細節,就像PythonR和其他工具一樣!話雖這麼說,如果我們沒有至少讓您瞭解一些基本知識,這將是對您的一種傷害,我們稍後將介紹這些基本知識。我並不是要降低它們的重要性因為它們都是同等重要的,但是我們的目標是讓所有的c#開發人員儘可能快地啟動和運行。我們將為您提供足夠的信息,使您的buzzword符合規範,然後您將瞭解更多,而不僅僅是封裝好的黑盒API調用! 我鼓勵你們每個人在這個領域儘可能多地追求學術知識。機器學習和人工智慧似乎每天都在變化,所以要時刻跟上最新的發展。你知道的越多,你的項目就越容易被接受。

       既然我們提出了buzzword相容的主題,讓我們從一開始就清理一些術語。數據挖掘,機器學習,人工智慧,等等。我現在只講幾個術語,但是這裡有一個簡單的方法。

       你和家人在公路上旅行。讓我們假設你有孩子,讓我們把“我們還在嗎的對話放在一邊! 你和你的一個孩子在高速公路上開車(一個很小的蹣跚學步的孩子),你的孩子指著窗外的一輛卡車大喊卡車。這個孩子還很小,所以他是怎麼知道那輛車是卡車的(讓我們假設它真的是卡車!)他們知道這是一輛卡車,因為每次他們做同樣的事情,你說不是。這是機器學習。然後,當你告訴他們是或不是,那就是強化學習。如果你說是的話,那是一輛大卡車,它會給強化過程增加背景,讓我們沿著這條路深入學習。看看你教給你的孩子什麼是甚至你都不知道的。


數據挖掘

       數據挖掘處理的是為非常具體的信息搜索大量的數據。您正在數據中搜索特定的內容。例如,信用卡公司將使用數據挖掘,通過分析購買行為和購買地點來瞭解購買者的習慣。這些信息對諸如目標廣告之類的東西非常有用。

       另一方面,機器學習側重於使用您提供的演算法搜索數據的實際任務。有道理嗎?

       這裡有一個很好的鏈接,您可以在這裡學習更多關於數據挖掘的知識: https:/​/​blog.​udacity.​com/​2014/​12/​24-​data-​science-​resources-​keep-​fingerpulse.​html

人工智慧

       人工智慧是機器學習的一個更高層次。有些人把它定義為機器看起來和人類一樣聰明或比人類聰明。對我來說,這個問題還沒有定論。我每天看的新聞越多,我就越想知道到底哪種智能是人工的,就這一點而言,什麼才是真正的智能!關於人工智慧的定義有很多,但簡而言之,人工智慧被認為是一種機器,它所做的事情是人類能夠或應該做的,以至於任何理性的人都無法在反應上區分機器和人類。無論如何,人工智慧是一個影響深遠的主題,不幸的是,它的含義和人們使用這個術語的含義一樣多。

生物-AI

       生物-AI指的是將一個生物組件與一個計算組件放在一起。基因型,表現型,神經元,鏡像神經元,典型神經元,突觸你會聽到在這個類別下所有提到的,人工神經網路(ANNs)!生物人工智慧主要應用於醫學領域。現在,我們不需要關心這個問題,只需要知道這個術語的存在,以及生物學是它的構成的基礎。

深度學習

       多年來,人們認為神經網路(使用一種稱為隱藏層的概念)只需要一個隱藏層就可以解決任何問題。隨著計算能力的提高,計算硬體成本的降低,以及神經網路演算法的進步,在您的網路中有數百甚至數千個隱藏層是很常見的。隱藏層的數量的增加,以及其他一些東西,簡單來說就是什麼是深度學習!這裡有一個直觀的比較,可能有助於讓事情變得更清楚:

                                                          

       如下圖所示,網路中有幾個隱藏的層

                                         

概率與統計

       信不信由你,這就是你正在做的;它是從你的觀點中很好地抽象出來的。但是讓我給你一個難以置信的,過度簡化的,快速入門以防你被繞暈了。

       你看見一隻北極熊在雪地里走。你想知道它會留下什麼樣的腳印。這是概率。接下來,你看到雪地上的腳印,想知道這是不是北極熊。這是統計數據。再舉一個例子以防萬一:

  1. 概率是指預測未來事件發生的可能性。
  2. 統計數據用於分析過去事件的頻率

開始你的機器學習項目

       接下來,讓我們談談我們將如何處理我們的機器學習項目,在此過程中,繼續定義/改進我們的機器學習心態。讓我們從定義每次處理這些項目時需要使用的基本步驟開始。基本上,我們可以把它們分成以下幾類。

數據收集

       有無數類型的數據可供您使用,從SQLNoSQL資料庫、Excel文件、Access資料庫、文本文件等等。您需要決定數據位於何處、如何格式化數據、如何導入和細化數據。您需要始終記住,大量的測試和培訓數據以及它們的質量是無法替代的。在機器學習中,無用輸入和無用輸出會變得非常混亂

數據準備

如前所述,數據質量是無可替代的。是否有丟失、畸形或不正確的數據?我們不要忘記另一個你們可能熟悉的術語,數據離群值。這些討厭的小數據片段根本不適合您的其他數據!你有嗎?如果是,他們應該在那裡嗎?如果是,他們將如何處理?如果您不確定,下麵是在繪製數據時數據離群值的樣子:

                                      

在統計學中,離群值是一個觀測點,它與其他觀測點之間的距離很遠,有時非常遠,有時不太遠。異常值本身可能是由於測量的可變性導致的,這表明瞭實驗存在缺陷,或者它實際上可能是有效的。如果您在數據中看到異常值,您需要瞭解原因。它們可以指示某種形式的測量誤差,而您使用的演算法可能不夠健壯,無法處理這些異常值。

選擇與訓練模型

       在創建和訓練模型時,需要考慮以下幾點。

  1. 您需要為手頭的任務選擇適當的機器學習演算法,它將代表您正在處理的數據。然後將其分成2-3組數據:培訓、驗證和測試。正確比例的規則根據您處理的數據量的不同而不同。例如,如果您有10,000行數據,那麼20%到培訓和80%到測試可能是好的。但是如果您有108行數據,那麼5%的訓練和95%的測試可能更好。
  2. 有一條規則你必須嚴格遵守。無論您決定為您的測試、訓練和驗證集使用什麼分數,所有的數據都必須來自相同的數據集。這是非常重要的。您永遠不希望從一個數據集中獲取一些數據來進行訓練,然後從另一個完全不同的數據集中獲取數據來進行測試。這隻會導致失望。
  3. 總是積累大量的數據集來訓練、測試和驗證。
  4. 驗證數據可用於在使用測試數據集之前驗證您的測試數據。有些人使用它,有些人不使用它。無論您如何分割數據,您總是有一個要訓練的數據集和一個要測試的數據集。您的演算法的目標必須是足夠靈活地處理它以前沒有見過的數據,如果您使用開發時使用的同一組數據進行測試,則無法做到這一點。以下是可以拆分數據的兩種方法。這兩種方法展示瞭如何分離測試和訓練集(一個帶有交叉驗證集,另一個沒有)

評估模型

       一旦您使用了您的訓練數據,您將繼續使用您之前準備的測試數據集來測試/評估您的模型。在這裡,我們可以發現我們的模型是如何根據它以前沒有看到的數據工作的。如果我們的模型在這裡失敗了,我們將返回到開始的地方,並改進我們的流程。

調教模型

當您在評估您的模型時,您可能在某個時候決定您需要選擇一個不同的模型,或者引入更多的特性/變數/超參數來提高模型的效率和性能。減少暴露的一個好方法是在數據收集部分和數據準備部分花費額外的時間。正如我們前面所說,大量正確的數據是無可替代的。

鳶尾花數據集

       鳶尾花數據集是生物學家Ronald Fisher先生於1936年介紹的花卉數據集。此數據集包含了3種鳶尾花(鳶尾花,鳶尾花,鳶尾花色)50個樣本。每個樣本包括四個特征(萼片的長度,花瓣的長度,萼片的寬度,花瓣的寬度)。結合這些數據,就可以得到一個線性判別模型來區分不同的物種。

那麼,我們如何從花到數據:

           

我們現在需要把我們所知道的花的視覺表現形式轉化成電腦可以理解的東西。我們將花的所有信息分解為列(特征)和行(數據項),如下所示:

             

既然所有的測量數據都是電腦能夠理解的格式,我們的第一步應該是確保我們沒有丟失或畸形的數據,因為這會帶來麻煩。如果您查看前面屏幕截圖中的黃色高亮部分,您可以看到我們丟失了一些數據。我們需要確保在將其提交給應用程式之前填充了它。一旦正確地準備和驗證了數據,我們就可以開始了。如果我們從Encog34運行Iris驗證器,我們的輸出應該反映出我們有150個數據集,它確實有:

                                

機器學習中的分類

現在,讓我們簡要地熟悉一下我們將在整本書中討論的不同類型的機器學習,重要的是你至少要熟悉這些術語,因為它們總有一天會出現,你知道的和理解的越多,你就能更好地處理你的問題並向別人解釋它。

下麵是一個簡單的圖表,展示了機器學習的三個主要類別:

監督式學習

       這些類型的機器學習模型被用來根據提供給它的數據預測結果。所提供的說明是明確和詳細的,或者至少應該是明確和詳細的,這是獲得所監督的標簽的原因。我們基本上是在學習一個基於輸入和輸出對將輸入映射到輸出的函數。這個函數是從被稱為標記的訓練數據中推斷出來的,因為它明確地告訴這個函數它期望什麼。在監督學習中,總是有一個輸入和相應的輸出(或者更準確地說,是一個期望的輸出值)。更正式地說,這類演算法使用一種稱為歸納偏差的技術來實現這一點,這基本上意味著演算法將使用一組假設來預測給定輸入的輸出,這些輸入可能是它以前見過的,也可能不是。

       在監督學習中,我們通常可以訪問一組X特征(X1, X2, X3…)Xx),用觀測值來測量,響應Y,也用同樣的n個觀測值來測量。然後我們試著用X1,X2, X3…Xn來預測Y

       支持向量機(SVM)、線性回歸、朴素貝葉斯和基於樹的方法等模型只是監督學習的幾個範例。

       接下來,讓我們簡要討論一下在有監督學習中我們需要關註的一些事情。它們沒有特定的順序。

  1. 偏見方差的權衡
  2. 數據的多樣性
  3. 不正確的輸出值
  4. 輸入空間維數
  5. 培訓數據量

偏差及方差的權衡

       在討論偏差-方差權衡之前,我們首先要確保您熟悉各個術語本身。      

       當我們討論偏差-方差權衡時,偏差指的是學習演算法中由於不正確的假設而產生的錯誤。高偏差會導致所謂的欠擬合現象,這種現象會導致演算法遺漏數據中相關的特征-輸出層關係

       另一方面,方差是對訓練集中的小波動的敏感誤差。高方差會導致演算法模擬隨機雜訊,而不是實際的預期輸出,這種現象稱為過擬合。

       每個機器學習開發人員都需要理解偏差和方差之間的平衡。它與數據的過擬合和過擬合有直接關係。我們說,如果一個學習演算法在不同的訓練集中預測不同的輸出結果,那麼它對輸入的方差很大,這當然不好。

       低偏差的機器學習演算法必須足夠靈活,才能很好地適應數據。但是,如果演算法設計過於靈活,每個訓練和測試數據集的擬合就會不一樣,導致方差很大。

       然而您的演算法又必須足夠靈活,那麼你可以通過固有的演算法知識或可由用戶調整的參數來調整這種權衡。

       下圖顯示了一個具有高偏差(左側)的簡單模型和一個具有高方差(右側)的更複雜模型。

訓練的數據量

       正如我們反覆說過的,沒有什麼可以替代足夠的數據來正確和完整地完成這項工作。這與學習演算法的複雜性直接相關。一個低偏差、低方差的簡單演算法可以從更少的數據中獲得更好的學習效果。然而,如果您的學習演算法很複雜(許多輸入特性、參數等),那麼您將需要一個更大的訓練集,在低偏差和高方差的情況下進行學習。

輸入空間維數

       對於每一個學習問題我們的輸入都是向量的形式。特征向量,即數據本身的特征,這對演算法的影響很大。如果輸入的特征向量非常大,也就是所謂的高維性,那麼即使只需要其中的幾個特征,學習起來也會更加困難。有時,額外的維度會混淆您的學習演算法,從而導致高方差。反過來,這意味著您必須優化演算法,使其具有更低的方差和更高的偏差。如果適用的話,從數據中刪除額外的特性有時會更容易提高學習方法的準確性。

       也就是說,一些機器學習演算法使用了一種稱為降維的流行技術。這些演算法將識別和刪除不相關的特征。

不正確的輸出值

       我們在這裡需要問自己的是,機器學習演算法的期望輸出中存在多少錯誤。學習演算法可能會試圖將數據擬合得太好,從而導致我們前面提到的過擬合。過度擬合可能是由於不正確的數據,或學習演算法過於複雜,無法完成手頭的任務。如果出現這種情況,我們需要調整演算法,或者尋找一個偏差更大、方差更小的演算法。

數據的多樣性

       數據的多樣性意味著特征向量包含許多不同種類的特征。如果這適用於我們的應用程式,那麼我們最好為任務應用不同的學習演算法。一些學習演算法還要求我們的數據被縮放以適應特定的範圍,如[0 -1][-1 -1]等。當我們學習以距離函數為基礎的演算法時,比如最近鄰居法和支持向量法,你會發現它們對這個非常敏感。另一方面,基於樹的演算法(決策樹等)可以很好地處理這種現象。

       我們應該始終從最簡單、最合適的演算法開始,並確保正確地收集和準備我們的數據。從這裡開始,我們可以嘗試不同的學習演算法,並對它們進行優化,看看哪種演算法最適合我們的情況。毫無疑問,優化演算法可能不是一項簡單的任務,並且最終會消耗比我們可用的時間多得多的時間。總是首先確保有適當數量的數據可用

無監督式學習

       與監督學習相反,在如何確定結果方面,非監督學習通常有更多的靈活性。對於演算法來說,數據的處理使得數據集中沒有任何一個特征比其他特征更重要。這些演算法從輸入數據的數據集學習,而不需要標記期望的輸出數據。k均值聚類(聚類分析)是無監督模型的一個例子。它非常善於在數據中找到與輸入數據相關的有意義的模式。我們在監督部分所學到的和這裡的最大區別是我們現在有了x的特征X1 X2 X3n個觀測值測量。但我們不再對Y的預測感興趣,因為我們不再有Y了,我們唯一感興趣的是在已有的特征上發現數據模式

                         

       在前面的圖中,我們可以看到這樣的數據本身更適合於非線性方法,在這種方法中,數據似乎是按重要性分組的。它是非線性的,因為我們無法得到一條直線來準確地分離和分類數據。無監督學習允許我們在幾乎不知道結果會是什麼或應該是什麼的情況下解決問題。結構來自於數據本身,而不是應用於輸出標簽的監督規則。這種結構通常由數據的聚類關係導出。

       例如,假設我們有許多個基因來自我們的基因組數據科學實驗。我們希望將這些數據分組為類似的片段,如頭髮顏色、壽命、體重等等。

       第二個例子是眾所周知的酒會效應,它基本上指的是大腦能夠將註意力集中到一件事上,並過濾掉周圍的噪音。

       這兩個示例都可以使用集群來實現它們的目標。

強化學習

       強化學習是一種機器被訓練為一個特定的結果,唯一的目的是最大化的效率和/或性能。該演算法因做出正確的決策而得到獎勵,因做出錯誤的決策而受到懲罰。持續的訓練是為了不斷提高績效。持續的學習過程意味著更少的人為干預。馬爾可夫模型是強化學習的一個例子,自動駕駛汽車就是這樣一個應用的很好的例子。它不斷地與環境進行交互,監視障礙物、速度限制、距離、行人等等,以便(希望如此)做出正確的決策。

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

-Advertisement-
Play Games
更多相關文章
  • 1.把功能類似的代碼放到一個目錄下 2.導入該模塊(直接導入該目錄名稱會報錯) 目錄結構: 模塊代碼展示: 導入測試代碼: 測試: 3.創建__init__.py文件(表示該目錄為一個模塊) 4.編輯__init__.py文件,添加代碼(集合裡面的內容表示為該模塊下要導入的文件名稱) 5.重新導入測 ...
  • 第一次在博客寫分享,請多多捧場,如有歧義請多多包含! 因為業務需求發展需要,所以API介面的變更升級是必不可少的事情,而原有的介面是不可能馬上停止使用的。例如:Login介面為例,1.0版本之返回用戶的基本信息,而2.0版本的迭代下,要把用戶祖宗十八代信息都要返回到客戶端,這時候1.0 vs 2.0 ...
  • 這篇文章演示如何使用ASP.NET Core創建第一個web api服務。開始新建一個Project。選擇模板’ASP.NET Core Web應用程式’,並且輸入解決方案名稱和項目名稱。然後,選擇框架’ASP.NET Core 2.2’,模板選擇’API’,點擊確定。這樣一個新的ASP.NET C... ...
  • Console.Read();和Console.ReadLine();和Console.ReadKey();區別詳解。 Console.Read();,專業:從標準輸入流讀取下一個字元。通俗:讀取鍵盤輸入的第一個字元、第二個字元...,以此類推,返回ASCII值,回車退出 。 示例代碼: 1 usi ...
  • 一、下載NPOI類庫 使用Nuget線上搜索NPOI,下載安裝 二、代碼開擼 ...
  • 一.Startup類 ASP.NET Core 應用是一個控制台應用,它在其 Program.Main 方法中創建 Web 伺服器。其中Main方法是應用的托管入口點,Main 方法調用 WebHost.CreateDefaultBuilder來創建 Web 主機,自動分配了 Kestrel Web ...
  • 這篇文章演示如何使用ASP.NET Core MVC創建第一個Web站點。開始新建一個Project。然後,選擇.NET Core/ASP.NET Core Web應用程式,並且輸入解決方案和項目名稱。然後,選擇ASP.NET Core 2.2框架和項目模板。這樣一個新的ASP.NET Core M... ...
  • 前言 微信公眾號對接第三方開發的前提就是授權。首先是開通開放平臺。開通時填寫資料包括公司信息,還需要300大洋。開放平臺包括移動應用、網站應用、公眾號賬號、小程式、第三方平臺。這裡我們開通第三方平臺。 開通第三方平臺時填寫基本信息,比如平臺名稱、平臺介紹、平臺圖片。下一步是選擇許可權集、開發資料。許可權 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...