paper 17 : 機器學習算法思想簡單梳理

前言:

  本文總結的常見機器學習算法(主要是一些常規分類器)大概流程和主要思想。

?

  樸素貝葉斯:

  有以下幾個地方需要注意:

  1. 如果給出的特征向量長度可能不同,這是需要歸一化為通長度的向量(這里以文本分類為例),比如說是句子單詞的話,則長度為整個詞匯量的長度,對應位置是該單詞出現的次數。

  2. 計算公式如下:

  

  其中一項條件概率可以通過樸素貝葉斯條件獨立展開。要注意一點就是 的計算方法,而由樸素貝葉斯的前提假設可知, = ,因此一般有兩種,一種是在類別為ci的那些樣本集中,找到wj出現次數的總和,然后除以該樣本的總和;第二種方法是類別為ci的那些樣本集中,找到wj出現次數的總和,然后除以該樣本中所有特征出現次數的總和。

  3. 如果 中 的某一項為0,則其聯合概率的乘積也可能為0,即2中公式的分子為0,為了避免這種現象出現,一般情況下會將這一項初始化為1,當然為了保證概率相等,分 母應對應初始化為2(這里因為是2類,所以加2,如果是k類就需要加k,術語上叫做laplace光滑, 分母加k的原因是使之滿足全概率公式)。

  樸素貝葉斯的優點:

  對小規模的數據表現很好,適合多分類任務,適合增量式訓練。

  缺點

  對輸入數據的表達形式很敏感。

?

?

  決策樹:

  決策樹中很重要的一點就是選擇一個屬性進行分枝,因此要注意一下信息增益的計算公式,并深入理解它。

  信息熵的計算公式如下:

  

  其中的n代表有n個分類類別(比如假設是2類問題,那么n=2)。分別計算這2類樣本在總樣本中出現的概率p1和p2,這樣就可以計算出未選中屬性分枝前的信息熵。

  現在選中一個屬性xi用來進行分枝,此時分枝規則是:如果xi=vx的話,將樣本分到樹的一個分 支;如果不相等則進入另一個分支。很顯然,分支中的樣本很有可能包括2個類別,分別計算這2個分支的熵H1和H2,計算出分枝后的總信息熵 H’=p1*H1+p2*H2.,則此時的信息增益ΔH=H-H’。以信息增益為原則,把所有的屬性都測試一邊,選擇一個使增益最大的屬性作為本次分枝屬 性。

  決策樹的優點:

  計算量簡單,可解釋性強,比較適合處理有缺失屬性值的樣本,能夠處理不相關的特征;

  缺點:

  容易過擬合(后續出現了隨機森林,減小了過擬合現象);

?

?

  Logistic回歸:

  Logistic是用來分類的,是一種線性分類器,需要注意的地方有:

  1. logistic函數表達式為:

  

  其導數形式為:

  

  2. logsitc回歸方法主要是用最大似然估計來學習的,所以單個樣本的后驗概率為:

  

  到整個樣本的后驗概率:

  

  其中:

  

  通過對數進一步化簡為:

  

  3. 其實它的loss function為-l(θ),因此我們需使loss function最小,可采用梯度下降法得到。梯度下降法公式為:

  

  

  Logistic回歸優點:

  1、實現簡單;

  2、分類時計算量非常小,速度很快,存儲資源低;

  缺點:

  1、容易欠擬合,一般準確度不太高

  2、只能處理兩分類問題(在此基礎上衍生出來的softmax可以用于多分類),且必須線性可分;

?

?

  線性回歸:

  線性回歸才是真正用于回歸的,而不像logistic回歸是用于分類,其基本思想是用梯度下降法對最小二乘法形式的誤差函數進行優化,當然也可以用normal equation直接求得參數的解,結果為:

  

  而在LWLR(局部加權線性回歸)中,參數的計算表達式為:

  

  因為此時優化的是:

  

  由此可見LWLR與LR不同,LWLR是一個非參數模型,因為每次進行回歸計算都要遍歷訓練樣本至少一次。

  線性回歸優點:

  實現簡單,計算簡單;

  缺點:

  不能擬合非線性數據;

?

?

  KNN算法:

  KNN即最近鄰算法,其主要過程為:

  1. 計算訓練樣本和測試樣本中每個樣本點的距離(常見的距離度量有歐式距離,馬氏距離等);

  2. 對上面所有的距離值進行排序;

  3. 選前k個最小距離的樣本;

  4. 根據這k個樣本的標簽進行投票,得到最后的分類類別;

  如何選擇一個最佳的K值,這取決于數據。一般情況下,在分類時較大的K值能夠減小噪聲的影響。但會使類別之間的界限變得模糊。一個較好的K值可通過各種啟發式技術來獲取,比如,交叉驗證。另外噪聲和非相關性特征向量的存在會使K近鄰算法的準確性減小。

  近鄰算法具有較強的一致性結果。隨著數據趨于無限,算法保證錯誤率不會超過貝葉斯算法錯誤率的兩倍。對于一些好的K值,K近鄰保證錯誤率不會超過貝葉斯理論誤差率。

  注:馬氏距離一定要先給出樣本集的統計性質,比如均值向量,協方差矩陣等。關于馬氏距離的介紹如下:

  

  KNN算法的優點:

  1. 思想簡單,理論成熟,既可以用來做分類也可以用來做回歸;

  2. 可用于非線性分類;

  3. 訓練時間復雜度為O(n);

  4. 準確度高,對數據沒有假設,對outlier不敏感;

  缺點:

  1. 計算量大;

  2. 樣本不平衡問題(即有些類別的樣本數量很多,而其它樣本的數量很少);

  3. 需要大量的內存;

?

?

  SVM

  要學會如何使用libsvm以及一些參數的調節經驗,另外需要理清楚svm算法的一些思路:

  1. svm中的最優分類面是對所有樣本的幾何裕量最大(為什么要選擇最大間隔分類器,請從數學角度上說明?網易深度學習崗位面試過程中有被問到。答案就是幾何間隔與樣本的誤分次數間存在關系:?,其中的分母就是樣本到分類間隔距離,分子中的R是所有樣本中的最長向量值),即:

  

  經過一系列推導可得為優化下面原始目標:

  

  2. 下面來看看拉格朗日理論:

  

  可以將1中的優化目標轉換為拉格朗日的形式(通過各種對偶優化,KKD條件),最后目標函數為:

  

  我們只需要最小化上述目標函數,其中的α為原始優化問題中的不等式約束拉格朗日系數。

  3. 對2中最后的式子分別w和b求導可得:

    

  由上面第1式子可以知道,如果我們優化出了α,則直接可以求出w了,即模型的參數搞定。而上面第2個式子可以作為后續優化的一個約束條件。

  4. 對2中最后一個目標函數用對偶優化理論可以轉換為優化下面的目標函數:

  

  而這個函數可以用常用的優化方法求得α,進而求得w和b。

  5. 按照道理,svm簡單理論應該到此結束。不過還是要補充一點,即在預測時有:

  

  那個尖括號我們可以用核函數代替,這也是svm經常和核函數扯在一起的原因。

  6. 最后是關于松弛變量的引入,因此原始的目標優化公式為:

  

  此時對應的對偶優化公式為:

  

  與前面的相比只是α多了個上界。

  SVM算法優點:

  可用于線性/非線性分類,也可以用于回歸;

  低泛化誤差;

  容易解釋;

  計算復雜度較低;

  缺點:

  對參數和核函數的選擇比較敏感;

  原始的SVM只比較擅長處理二分類問題;

?

?

  Boosting

  主要以Adaboost為例,首先來看看Adaboost的流程圖,如下:

  

  從圖中可以看到,在訓練過程中我們需要訓練出多個弱分類器(圖中為3個),每個弱分類器是由不同權 重的樣本(圖中為5個訓練樣本)訓練得到(其中第一個弱分類器對應輸入樣本的權值是一樣的),而每個弱分類器對最終分類結果的作用也不同,是通過加權平均 輸出的,權值見上圖中三角形里面的數值。那么這些弱分類器和其對應的權值是怎樣訓練出來的呢?

  下面通過一個例子來簡單說明。

  書中(machine learning in action)假設的是5個訓練樣本,每個訓練樣本的維度為2,在訓練第一個分類器時5個樣本的權重各為0.2. 注意這里樣本的權值和最終訓練的弱分類器組對應的權值α是不同的,樣本的權重只在訓練過程中用到,而α在訓練過程和測試過程都有用到。

  現在假設弱分類器是帶一個節點的簡單決策樹,該決策樹會選擇2個屬性(假設只有2個屬性)的一個,然后計算出這個屬性中的最佳值用來分類。

  Adaboost的簡單版本訓練過程如下:

  1. 訓練第一個分類器,樣本的權值D為相同的均值。通過一個弱分類器,得到這5個樣本(請對應書中的例子來看,依舊是machine learning in action)的分類預測標簽。與給出的樣本真實標簽對比,就可能出現誤差(即錯誤)。如果某個樣本預測錯誤,則它對應的錯誤值為該樣本的權重,如果分類 正確,則錯誤值為0. 最后累加5個樣本的錯誤率之和,記為ε。

  2. 通過ε來計算該弱分類器的權重α,公式如下:

  

  3. 通過α來計算訓練下一個弱分類器樣本的權重D,如果對應樣本分類正確,則減小該樣本的權重,公式為:

  

  如果樣本分類錯誤,則增加該樣本的權重,公式為:

  

  4. 循環步驟1,2,3來繼續訓練多個分類器,只是其D值不同而已。

  測試過程如下:

  輸入一個樣本到訓練好的每個弱分類中,則每個弱分類都對應一個輸出標簽,然后該標簽乘以對應的α,最后求和得到值的符號即為預測標簽值。

  Boosting算法的優點:

  低泛化誤差;

  容易實現,分類準確率較高,沒有太多參數可以調;

  缺點:

  對outlier比較敏感;

?

?

  聚類:

  根據聚類思想劃分:

  1. 基于劃分的聚類:

  K-means, k-medoids(每一個類別中找一個樣本點來代表),CLARANS.

  k-means是使下面的表達式值最小:

  

   k-means算法的優點:

  (1)k-means算法是解決聚類問題的一種經典算法,算法簡單、快速。

  (2)對處理大數據集,該算法是相對可伸縮的和高效率的,因為它的復雜度大約是O(nkt),其中n是所有對象的數目,k是簇的數目,t是迭代的次數。通常k<<n。這個算法通常局部收斂。

  (3)算法嘗試找出使平方誤差函數值最小的k個劃分。當簇是密集的、球狀或團狀的,且簇與簇之間區別明顯時,聚類效果較好。

   缺點:

  (1)k-平均方法只有在簇的平均值被定義的情況下才能使用,且對有些分類屬性的數據不適合。

  (2)要求用戶必須事先給出要生成的簇的數目k。

  (3)對初值敏感,對于不同的初始值,可能會導致不同的聚類結果。

  (4)不適合于發現非凸面形狀的簇,或者大小差別很大的簇。

  (5)對于"噪聲"和孤立點數據敏感,少量的該類數據能夠對平均值產生極大影響。

  2. 基于層次的聚類:

  自底向上的凝聚方法,比如AGNES。

  自上向下的分裂方法,比如DIANA。

  3. 基于密度的聚類:

  DBSACN,OPTICS,BIRCH(CF-Tree),CURE.

  4. 基于網格的方法:

  STING, WaveCluster.

  5. 基于模型的聚類:

  EM,SOM,COBWEB.

  以上這些算法的簡介可參考聚類(百度百科)。

?

?

  推薦系統:

  推薦系統的實現主要分為兩個方面:基于內容的實現和協同濾波的實現。

  基于內容的實現:

  不同人對不同電影的評分這個例子,可以看做是一個普通的回歸問題,因此每部電影都需要提前提取出一 個特征向量(即x值),然后針對每個用戶建模,即每個用戶打的分值作為y值,利用這些已有的分值y和電影特征值x就可以訓練回歸模型了(最常見的就是線性 回歸)。這樣就可以預測那些用戶沒有評分的電影的分數。(值得注意的是需對每個用戶都建立他自己的回歸模型)

  從另一個角度來看,也可以是先給定每個用戶對某種電影的喜好程度(即權值),然后學出每部電影的特征,最后采用回歸來預測那些沒有被評分的電影。

  當然還可以是同時優化得到每個用戶對不同類型電影的熱愛程度以及每部電影的特征。具體可以參考Ng在coursera上的ml教程:https://www.coursera.org/course/ml

  基于協同濾波的實現:

  協同濾波(CF)可以看做是一個分類問題,也可以看做是矩陣分解問題。協同濾波主要是基于每個人自 己的喜好都類似這一特征,它不依賴于個人的基本信息。比如剛剛那個電影評分的例子中,預測那些沒有被評分的電影的分數只依賴于已經打分的那些分數,并不需 要去學習那些電影的特征。

  SVD將矩陣分解為三個矩陣的乘積,公式如下所示:

  

  中間的矩陣sigma為對角矩陣,對角元素的值為Data矩陣的奇異值(注意奇異值和特征值是不同的),且已經從大到小排列好了。即使去掉特征值小的那些特征,依然可以很好的重構出原始矩陣。如下圖所示:

  

  其中更深的顏色代表去掉小特征值重構時的三個矩陣。

  果m代表商品的個數,n代表用戶的個數,則U矩陣的每一行代表商品的屬性,現在通過降維U矩陣(取 深色部分)后,每一個商品的屬性可以用更低的維度表示(假設為k維)。這樣當新來一個用戶的商品推薦向量X,則可以根據公式X'*U1*inv(S1)得 到一個k維的向量,然后在V’中尋找最相似的那一個用戶(相似度測量可用余弦公式等),根據這個用戶的評分來推薦(主要是推薦新用戶未打分的那些商品)。 具體例子可以參考網頁:SVD在推薦系統中的應用。

  另外關于SVD分解后每個矩陣的實際含義可以參考google吳軍的《數學之美》一書(不過個人感覺吳軍解釋UV兩個矩陣時好像弄反了,不知道大家怎樣認為)。或者參考machine learning in action其中的svd章節。

?

?

  pLSA:

  pLSA由LSA發展過來,而早期LSA的實現主要是通過SVD分解。pLSA的模型圖如下:

  

  公式中的意義如下:

  

  具體可以參考2010龍星計劃:機器學習中對應的主題模型那一講

?

?

  LDA

  主題模型,概率圖如下:

  

  和pLSA不同的是LDA中假設了很多先驗分布,且一般參數的先驗分布都假設為Dirichlet分布,其原因是共軛分布時先驗概率和后驗概率的形式相同。

?

?

  GDBT

  GBDT(Gradient Boosting Decision Tree) 又 叫 MART(Multiple Additive Regression Tree),好像在阿里內部用得比較多(所以阿里算法崗位面試時可能會問 到),它是一種迭代的決策樹算法,該算法由多棵決策樹組成,所有樹的輸出結果累加起來就是最終答案。它在被提出之初就和SVM一起被認為是泛化能力 (generalization)較強的算法。近些年更因為被用于搜索排序的機器學習模型而引起大家關注。

  GBDT是回歸樹,不是分類樹。其核心就在于,每一棵樹是從之前所有樹的殘差中來學習的。為了防止過擬合,和Adaboosting一樣,也加入了boosting這一項。

  關于GDBT的介紹可以可以參考:GBDT(MART) 迭代決策樹入門教程 | 簡介。

?

?

  Regularization:

  作用是(網易電話面試時有問到):

  1. 數值上更容易求解;

  2. 特征數目太大時更穩定;

  3. 控制模型的復雜度,光滑性。復雜性越小且越光滑的目標函數泛化能力越強。而加入規則項能使目標函數復雜度減小,且更光滑。

  4. 減小參數空間;參數空間越小,復雜度越低。

  5. 系數越小,模型越簡單,而模型越簡單則泛化能力越強(Ng宏觀上給出的解釋)。

  6. 可以看成是權值的高斯先驗。

?

?

  異常檢測:

  可以估計樣本的密度函數,對于新樣本直接計算其密度,如果密度值小于某一閾值,則表示該樣本異常。 而密度函數一般采用多維的高斯分布。如果樣本有n維,則每一維的特征都可以看作是符合高斯分布的,即使這些特征可視化出來不太符合高斯分布,也可以對該特 征進行數學轉換讓其看起來像高斯分布,比如說x=log(x+c), x=x^(1/c)等。異常檢測的算法流程如下:

  

  其中的ε也是通過交叉驗證得到的,也就是說在進行異常檢測時,前面的p(x)的學習是用的無監 督,后面的參數ε學習是用的有監督。那么為什么不全部使用普通有監督的方法來學習呢(即把它看做是一個普通的二分類問題)?主要是因為在異常檢測中,異常 的樣本數量非常少而正常樣本數量非常多,因此不足以學習到好的異常行為模型的參數,因為后面新來的異常樣本可能完全是與訓練樣本中的模式不同。

  另外,上面是將特征的每一維看成是相互獨立的高斯分布,其實這樣的近似 并不是最好的,但是它的計算量較小,因此也常被使用。更好的方法應該是將特征擬合成多維高斯分布,這時有特征之間的相關性,但隨之計算量會變復雜,且樣本 的協方差矩陣還可能出現不可逆的情況(主要在樣本數比特征數小,或者樣本特征維數之間有線性關系時)。

  上面的內容可以參考Ng的https://www.coursera.org/course/ml

?

?

  EM算法:

  有時候因為樣本的產生和隱含變量有關(隱含變量是不能觀察的),而求模型的參數時一般采用最大似然估計,由于含有了隱含變量,所以對似然函數參數求導是求不出來的,這時可以采用EM算法來求模型的參數的(對應模型參數個數可能有多個),EM算法一般分為2步:

  E步:選取一組參數,求出在該參數下隱含變量的條件概率值;

  M步:結合E步求出的隱含變量條件概率,求出似然函數下界函數(本質上是某個期望函數)的最大值。

  重復上面2步直至收斂。

  公式如下所示:

  

  M步公式中下界函數的推導過程:

  

  EM算法一個常見的例子就是GMM模型,每個樣本都有可能由k個高斯產生,只不過由每個高斯產生的概率不同而已,因此每個樣本都有對應的高斯分布(k個中的某一個),此時的隱含變量就是每個樣本對應的某個高斯分布。

  GMM的E步公式如下(計算每個樣本對應每個高斯的概率):

  

  更具體的計算公式為:

  

  M步公式如下(計算每個高斯的比重,均值,方差這3個參數):

  

  關于EM算法可以參考Ng的cs229課程資料 或者網易公開課:斯坦福大學公開課 :機器學習課程。

?

?

  Apriori:

  Apriori是關聯分析中比較早的一種方法,主要用來挖掘那些頻繁項集合。其思想是:

  1. 如果一個項目集合不是頻繁集合,那么任何包含它的項目集合也一定不是頻繁集合;

  2. 如果一個項目集合是頻繁集合,那么它的任何非空子集也是頻繁集合;

  Aprioir需要掃描項目表多遍,從一個項目開始掃描,舍去掉那些不是頻繁的項目,得到的集合稱為L,然后對L中的每個元素進行自組合,生成比上次掃描多一個項目的集合,該集合稱為C,接著又掃描去掉那些非頻繁的項目,重復…

  看下面這個例子:

  元素項目表格:

  

  如果每個步驟不去掉非頻繁項目集,則其掃描過程的樹形結構如下:

  

  在其中某個過程中,可能出現非頻繁的項目集,將其去掉(用陰影表示)為:

  

  上面的內容主要參考的是machine learning in action這本書。

?

?

  FP Growth:

  FP Growth是一種比Apriori更高效的頻繁項挖掘方法,它只需要掃描項目表2次。其中第1次掃描獲得當個項目的頻率,去掉不符合支持度要求的項,并對剩下的項排序。第2遍掃描是建立一顆FP-Tree(frequent-patten tree)。

  接下來的工作就是在FP-Tree上進行挖掘。

  比如說有下表:

  

  它所對應的FP_Tree如下:

  

  然后從頻率最小的單項P開始,找出P的條件模式基,用構造FP_Tree同樣的方法來構造P的條件模式基的FP_Tree,在這棵樹上找出包含P的頻繁項集。

  依次從m,b,a,c,f的條件模式基上挖掘頻繁項集,有些項需要遞歸的去挖掘,比較麻煩,比如m節點,具體的過程可以參考博客:Frequent Pattern 挖掘之二(FP Growth算法),里面講得很詳細。

?

?

  參考資料:

   Harrington, P. (2012). Machine Learning in Action, Manning Publications Co.

最近鄰算法(維基百科)

馬氏距離(維基百科)

   聚類(百度百科)

https://www.coursera.org/course/ml

SVD在推薦系統中的應用

吳軍 and 谷歌 (2012). 數學之美, 人民郵電出版社.

2010龍星計劃:機器學習對應的視頻教程:2010龍星計劃機器學習視頻教程

GBDT(MART) 迭代決策樹入門教程 | 簡介

Ng的cs229課程資料

斯坦福大學公開課 :機器學習課程

Frequent Pattern 挖掘之二(FP Growth算法)

?

最后,本文看了文章的朋友都會知道,此文不是我的原創,那么,我就把出處留給你們,方便交流!

?

出處一:http://mp.weixin.qq.com/s?__biz=MzAxNTM4OTQxNQ==&mid=207179237&idx=1&sn=f0582c970f8962b8fef730cc39df7173&scene=23&srcid=1017SoPlad4uaAGBMtqWvFl0#rd

出處二:http://www.cnblogs.com/tornadomeet

?

?

?

轉載于:https://www.cnblogs.com/molakejin/p/5149386.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285846.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285846.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285846.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BZOJ1179 Atm //縮點+spfa

1179: [Apio2009]Atm Description Input 第一行包含兩個整數N、M。N表示路口的個數&#xff0c;M表示道路條數。接下來M行&#xff0c;每行兩個整數&#xff0c;這兩個整數都在1到N之間&#xff0c;第i1行的兩個整數表示第i條道路的起點和終點的路口編號。接下來N行&#xff0c…

centos 新建swap區文件

一. 相當詳細且流程完整&#xff0c;&#xff08;推薦閱讀&#xff09; 在centos7上新建swap區 https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-centos-7 二. centos官網 轉&#xff1a;https://www.centos.org/docs/5/html/5.2/Deployment_Guide/s2-sw…

ArcGIS實驗教程——實驗三十六:ArcGIS Python腳本的巧妙使用

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據)》 文章目錄 一、ArcGIS腳本簡介二、Python腳本與ArcPy三、Python窗口四、腳本編寫(案例:矢量數據批量裁剪)五、在ModelBuilder中使用腳本工具一、ArcGIS腳本簡介 腳本與模型相似,也是把處理過程…

基于Spring Boot和Spring Cloud實現微服務架構學習

目錄 Spring 頂級框架 Spring cloud子項目 WHAT - 什么是微服務 微服務簡介 微服務的具體特征 SOA vs Microservice HOW - 怎么具體實踐微服務 客戶端如何訪問這些服務&#xff1f; 服務之間如何通信&#xff1f; 這么多服務&#xff0c;怎么找? 這么多服務&#x…

C語言試題七十七之請編寫函實現漁夫打魚曬網問題

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 編寫函數:…

.NetCore實現圖片縮放與裁剪 - 基于ImageSharp

前言&#xff08;突然發現斷更有段時間了最近在做博客的時候&#xff0c;需要實現一個類似Lorempixel、LoremPicsum這樣的隨機圖片功能&#xff0c;圖片有了&#xff0c;還需要一個根據輸入的寬度高度獲取圖片的功能&#xff0c;由于之前處理圖片時使用到了ImageSharp庫&#x…

Mysql身份認證漏洞及利用(CVE-2012-2122) 補充測試用例

當連接MariaDB/MySQL時&#xff0c;輸入的密碼會與期望的正確密碼比較&#xff0c;由于不正確的處理&#xff0c;會導致即便是memcmp()返回一個非零值&#xff0c;也會使MySQL認為兩個密碼是相同的。也就是說只要知道用戶名&#xff0c;不斷嘗試就能夠直接登入SQL數據庫。按照公…

添加啟動類

添加.h和cpp #pragma once #include "afxwin.h" class mySplash :public CWnd {DECLARE_DYNAMIC(mySplash)protected:DECLARE_MESSAGE_MAP()public:CBitmap m_bitmap;void Create(UINT nBitmapID);afx_msg void OnPaint();afx_msg void OnTimer(UINT_PTR nIDEvent); …

ArcGIS實驗教程——實驗三十七:基于ArcGIS的太陽輻射分析案例教程

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據)》 文章目錄 一、太陽輻射的基本概念1. 視域2. 太陽圖3. 星空圖二、太陽輻射ArcGIS案例實現1. 對該區域進行太陽輻射區域分析2. 對單個點的太陽輻射進行分析太陽輻射是地球上各種物理過程和生物過程的…

C語言試題七十八之請編寫函實現求2個數的最大公約數和最小公倍數(輾轉相除法)

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 求2個數的…

restful-api-design-references

之所以創建這個 repository&#xff0c;是因為我希望收集一些比較好的有關于 RESTful API 設計的參考文獻。偶爾回顧&#xff0c;偶爾改進&#xff0c;大家一起來吧~ 如果你有更好的私藏文章&#xff0c;不凡分享出來&#xff0c;獨樂樂不如眾樂樂&#xff0c;(⊙o⊙) RESTful…

jQuery 3.4.0 Released(2019.4.10)

jQuery has a new release! It’s been a while since our last release, but we expect this to be the last minor release in the 3.x branch, and then we will move on to the overhaul that will be jQuery 4.0. But before we get to 4.0, we’re excited to share the …

C#-Linq源碼解析之DefaultIfEmpty

前言在Dotnet開發過程中&#xff0c;DefaultIfEmpty作為IEnumerable的擴展方法&#xff0c;十分常用。本文對DefaultIfEmpty方法的關鍵源碼進行簡要分析&#xff0c;以方便大家日后更好的使用該方法。使用DefaultIfEmpty 返回 IEnumerable< T> 的元素&#xff1b;如果序列…

ArcGIS實驗教程——實驗三十八:基于ArcGIS的等高線、山體陰影、山頂點提取案例教程

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據)》 文章目錄 1. 加載DEM2. 提取等高距為15m的等高線3. 提取等高距為75m的等高線4. 生成山體陰影5. 生成三維等高線6. 提取山頂點7. 實驗數據下載地址山頂點指那些在特定鄰域分析范圍內,該點都比周圍…

Zabbix3.0 安裝Graphtree

zabbix中&#xff0c;想要集中展示圖形&#xff0c;唯一的選擇是screen&#xff0c;zatree可以解決這個問題&#xff0c;但是性能不是很好。 Graphtree由OneOaas開發并開源出來&#xff0c;用來解決zabbix的圖形展示問題&#xff0c;性能比較好 因為默認的zabbix 展示圖形很麻煩…

(2.3)其他補充—— 二、solidity 基礎進階《實戰NFT web3 solidity(新版本0.8.+)》

《web3 solidity0.8.版本&#xff08;持續更新新版本內容&#xff09; 基礎到實戰NFT開發》會及時更新新版本 solidity 內容&#xff0c;以及完成最終的 NFT 實戰商業項目部分。 注&#xff1a;由于是付費專欄內容&#xff0c;若有錯誤請及時聯系1_bit&#xff0c;博客鏈接&am…

Android之實現點擊布局縮小然后再放大動畫

1、需求 現在需要實現點擊View先縮小然后再放大效果 2、代碼實現 在res的anim目錄下面&#xff0c;寫anim_small.xml文件 <?xml version"1.0" encoding"utf-8"?> <set xmlns:android"http://schemas.android.com/apk/res/android"…

如何在web api中使用SignalR

說明&#xff1a; 在webapi中使用signalr&#xff0c;使用IIS 環境&#xff1a; vs2012, .net4.5 第一步&#xff1a;建web api項目 第二步&#xff1a;nuget導入signalr Install-Package Microsoft.AspNet.SignalR Install-Package Microsoft.Owin.Cors &#xff08;用于…

Directx11學習筆記【二】 將HelloWin封裝成類

我們把上一個教程的代碼封裝到一個類中來方便以后的使用。 首先新建一個空工程叫做MyHelloWin&#xff0c;添加一個main.cpp文件&#xff0c;然后新建一個類叫做MyWindow,將于窗體有關的操作封裝到里面 MyWindow.h文件 1 /***************************************************…

Badboy自動化測試工具11 導出腳本用于Jmeter并發測試

本節主要講解利用Jmeter進行并發測試和引入圖像報表 1. 在Jmeter中打開上節課&#xff08;10&#xff09;Badboy導出的在拉手網查詢KTV的腳本Lashou_Search.jmx. 2. 右擊Lashou節點&#xff0c;Add->Listener->Aggregate Graph & Graph Results 3. 對圖像報表進行配置…