<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 智能計算 > 設計應用 > 機器學(xué)習算法的基本知識(使用Python和R代碼)

機器學(xué)習算法的基本知識(使用Python和R代碼)

作者: 時(shí)間:2017-10-17 來(lái)源:網(wǎng)絡(luò ) 收藏

  本篇 文章 是 原文 的譯文,然后自己對其中做了一些修改和添加內容(隨機森林和降維算法)。文章簡(jiǎn)潔地介紹了的主要算法和一些偽 代碼 ,對于 初學(xué)者 有很大幫助,是一篇不錯的 總結 文章,后期可以通過(guò)文中提到的算法展開(kāi)去做一些實(shí)際問(wèn)題。

本文引用地址:http://dyxdggzs.com/article/201710/370117.htm

  引言

  Google 的自駕車(chē)和機器人得到了很多新聞,但公司的真正未來(lái)是,這種技術(shù)使計算機變得更 智能 ,更個(gè)性化。-Eric Schm id t (Google Chair man)

  我們可能生活在人類(lèi)歷史上最具影響力的時(shí)期——計算從大型 主機 到PC移動(dòng)到 云 計算的時(shí)期。 但是使這段時(shí)期有意義的不是發(fā)生了什么,而是在未來(lái)幾年里我們的方式。

  這個(gè)時(shí)期令像我這樣的一個(gè)人興奮的就是,隨著(zhù)計算機的推動(dòng),工具和技術(shù)的民主化。 今天,作為 數據科學(xué) 家,我可以每小時(shí)為幾個(gè)玩偶構建具有復雜算法的 數據 處理機。 但到達這里并不容易,我已經(jīng)度過(guò)了許多黑暗的日日夜夜。

  誰(shuí)可以從本指南中獲益最多

  我今天發(fā)布的可能是我創(chuàng )造的最有價(jià)值的指南。

  創(chuàng )建本指南背后的理念是簡(jiǎn)化全球有抱負的數據科學(xué)家和愛(ài)好者的旅程。 本指南能夠使你在研究機器學(xué)習問(wèn)題的過(guò)程中獲取經(jīng)驗。 我提供了關(guān)于各種機器學(xué)習算法以及R&代碼的高級理解以及運行它們,這些應該足以使你得心順手。

    

機器學(xué)習算法的基本知識(使用Python和R代碼)

 

  machine learning

  我故意跳過(guò)了這些技術(shù)背后的 統計 數據,因為你不需要在開(kāi)始時(shí)就了解它們。 所以,如果你正在尋找對這些算法的統計學(xué)理解,你應該看看別的文章。 但是,如果你正在尋找并開(kāi)始構建機器學(xué)習項目,那么這篇文章給你帶來(lái)極大好處。

  3類(lèi)機器學(xué)習算法(廣義上)

  監督學(xué)習

  工作原理 :該算法由一組目標/結果變量(或因變量)組成,該變量將根據給定的一組預測變量(獨立變量)進(jìn)行預測。 使用這些變量集,我們生成一個(gè)將輸入映射到所需輸出的函數。 訓練過(guò)程繼續進(jìn)行執行,直到 模型 達到培訓數據所需的準確度水平。 監督學(xué)習的例子:回歸,決策樹(shù),隨機森林,KNN,邏輯回歸等

  無(wú)監督學(xué)習

  如何工作:在這個(gè)算法中,我們沒(méi)有任何目標或結果變量來(lái)預測/估計。 用于不同群體的群體聚類(lèi)和用于不同群體的客戶(hù)進(jìn)行特定干預。 無(wú)監督學(xué)習的例子:Apriori算法,K-means。

  加強學(xué)習:

  工作原理:使用這種算法,機器受到學(xué)習和訓練,作出具體決定。 它以這種方式工作:機器暴露在一個(gè)環(huán)境中,它連續不斷地使用試錯。 該機器從過(guò)去的經(jīng)驗中學(xué)習,并嘗試捕獲最好的知識,以做出準確的業(yè)務(wù)決策。 加強學(xué)習示例:馬爾可夫決策過(guò)程

  常見(jiàn)機器學(xué)習算法

  以下是常用機器學(xué)習算法的列表。 這些算法幾乎可以應用于任何數據問(wèn)題:

  線(xiàn)性回歸

  邏輯回歸

  決策樹(shù)

  SVM

  樸素貝葉斯

  KNN

  K-Means

  隨機森林

  降維算法

  Gradient Boost&Adaboost

  1.線(xiàn)性回歸

  它用于基于連續變量來(lái)估計實(shí)際價(jià)值(房屋成本,電話(huà)數量,總銷(xiāo)售額等)。在這里,我們通過(guò)擬合最佳線(xiàn)來(lái)建立獨立變量和因變量之間的關(guān)系。這個(gè)最佳擬合線(xiàn)被稱(chēng)為回歸線(xiàn),由線(xiàn)性方程Y = a * X + b表示。

  理解線(xiàn)性回歸的最好方法是回想童年的經(jīng)歷。比如,你要求五年級的孩子通過(guò)體重來(lái)從小到大排序班里的 學(xué)生 ,而事先不告訴學(xué)生們的體重!你認為孩子會(huì )做什么?他/她很可能在身高和體格上分析 人物 的體重,并使用這些可視 參數 的組合進(jìn)行排列。這是現實(shí)生活中的線(xiàn)性回歸!孩子實(shí)際上已經(jīng)弄清楚,身高和體格將有一個(gè)關(guān)系與體重相關(guān)聯(lián),看起來(lái)就像上面的等式。

  在這個(gè)方程式中:

  Y-因變量

  a – 斜率

  X – 自變量

  b – 截距

  這些系數a和b是基于最小化數據點(diǎn)和回歸線(xiàn)之間的距離的平方差之和導出的。

  看下面的例子。這里我們確定了線(xiàn)性方程y = 0.2811x + 13.9的最佳擬合線(xiàn)?,F在使用這個(gè)方程,我們可以找到一個(gè)人(身高已知)的體重。

    

機器學(xué)習算法的基本知識(使用Python和R代碼)

 

  線(xiàn)性回歸

  線(xiàn)性回歸主要有兩種類(lèi)型:簡(jiǎn)單線(xiàn)性回歸和多元線(xiàn)性回歸。 簡(jiǎn)單線(xiàn)性回歸的特征在于一個(gè)自變量。 而且,多元線(xiàn)性回歸(顧名思義)的特征是多個(gè)(多于1個(gè))自變量。 在找到最佳擬合線(xiàn)的同時(shí),可以擬合多項式或曲線(xiàn)回歸線(xiàn),這些被稱(chēng)為多項式或曲線(xiàn)回歸。

   Code

  #Import Library

  #Import other necessary libraries like pandas, numpy...

  from sklearn import linear_model

  import numpy as np

  #Load Train and Test datasets

  #Identify feature and response variable(s) and values must be numeric and numpy arrays

  # x_train=input_variables_values_training_datasets

  x_train=np.random.rand(4,4)

  print(x_train)

  # y_train=target_variables_values_training_datasets

  y_train=np.random.rand(4,4)

  print(y_train)

  # x_test=input_variables_values_test_datasets

  x_test=np.random.rand(4,4)

  print(x_test)

  # Create linear regression object

  linear = linear_model.LinearRegression()

  # Train the model using the training sets and check score

  linear.fit(x_train, y_train)

  linear.score(x_train, y_train)

  #Equation coefficient and Intercept

  print('Coefficient: /n', linear.coef_)

  print('Intercept: /n', linear.intercept_)

  #Predict Output

  predicted= linear.predict(x_test)

  print('predicted:/n',predicted)

  [[ 0.98267731 0.23364069 0.35133775 0.92826309]

  [ 0.80538991 0.05637806 0.87662175 0.3960776 ]

  [ 0.54686738 0.6816495 0.99747716 0.32531085]

  [ 0.19189509 0.87105462 0.88158122 0.25056621]]

  [[ 0.55541608 0.56859636 0.40616234 0.14683524]

  [ 0.09937835 0.63874553 0.92062536 0.32798326]

  [ 0.87174236 0.779044 0.79119392 0.06912842]

  [ 0.87907434 0.53175367 0.01371655 0.11414196]]

  [[ 0.37568516 0.17267374 0.51647046 0.04774661]

  [ 0.38573914 0.85335136 0.11647555 0.0758696 ]

  [ 0.67559384 0.57535368 0.88579261 0.26278658]

  [ 0.13829782 0.28328756 0.51170484 0.04260013]]

  Coefficient:

  [[ 0.55158868 1.45901817 0.31224322 0.49538173]

  [ 0.6995448 0.40804135 0.59938423 0.09084578]

  [ 1.79010371 0.21674532 1.60972012 -0.046387 ]

  [-0.31562917 -0.53767439 -0.16141312 -0.2154683 ]]

  Intercept:

  [-0.89705102 -0.50908061 -1.9260686 0.83934127]

  predicted:

  [[-0.25297601 0.13808785 -0.38696891 0.53426883]

  [ 0.63472658 0.18566989 -0.86662193 0.22361739]

  [ 0.72181277 0.75309881 0.82170796 0.11715048]

  [-0.22656611 0.01383581 -0.79537442 0.55159912]]

  R Code

  #Load Train and Test datasets

  #Identify feature and response variable(s) and values must be numeric and numpy arrays

  x_train <- input_variables_values_training_datasets

  y_train <- target_variables_values_training_datasets

  x_test <- input_variables_values_test_datasets

  x <- cbind(x_train,y_train)

  # Train the model using the training sets and check score

  linear <- lm(y_train ~ ., data = x)

  summary(linear)

  #Predict Output

  predicted= predict(linear,x_test)

  2.邏輯回歸

  不要因為它的名字而感到困惑,邏輯回歸是一個(gè)分類(lèi)算法而不是回歸算法。它用于基于給定的一組自變量來(lái)估計離散值(二進(jìn)制值,如0/1,是/否,真/假)。簡(jiǎn)單來(lái)說(shuō),它通過(guò)將數據擬合到lo git 函數來(lái)預測事件發(fā)生的概率。因此,它也被稱(chēng)為logit回歸。由于它預測概率,其輸出值在0和1之間(如預期的那樣)。

  再次,讓我們通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)嘗試理解這一點(diǎn)。

  假設你的朋友給你一個(gè)難題解決。只有2個(gè)結果場(chǎng)景 - 你能解決和不能解決?,F在想象,你正在被許多猜謎或者簡(jiǎn)單測驗,來(lái)試圖理解你擅長(cháng)的科目。這項研究的結果將是這樣的結果 - 如果給你一個(gè)10級的三角形問(wèn)題,那么你有70%可能會(huì )解決這個(gè)問(wèn)題。另外一個(gè)例子,如果是五級的歷史問(wèn)題,得到答案的概率只有30%。這就是邏輯回歸為你提供的結果。

  對數學(xué)而言,結果的對數幾率被建模為預測變量的線(xiàn)性組合。

  odds= p/ (1-p) = probability of event occurrence / probability of not event occurrence ln(odds) = ln(p/(1-p)) logit(p) = ln(p/(1-p)) = b0+b1X1+b2X2+b3X3....+bkXk

  以上,p是感興趣特征的概率。 它選擇最大化觀(guān)察樣本值的可能性的參數,而不是最小化平方誤差的總和(如在普通回歸中)。

  現在,你可能會(huì )問(wèn),為什么要采用log? 為了簡(jiǎn)單起見(jiàn),讓我們來(lái)說(shuō),這是復制階梯函數的最好的數學(xué)方法之一。 我可以進(jìn)一步詳細介紹,但這將會(huì )打破這篇文章的目的。

    

機器學(xué)習算法的基本知識(使用Python和R代碼)

 

  邏輯回歸

   Code

  #Import Library

  from sklearn.linear_model import LogisticRegression

  #Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset

  # Create logistic regression object

  model = LogisticRegression()

  # Train the model using the training sets and check score

  model.fit(X, y)

  model.score(X, y)

  #Equation coefficient and Intercept

  print('Coefficient: /n', model.coef_)

  print('Intercept: /n', model.intercept_)

  #Predict Output

  predicted= model.predict(x_test)

  R Code

  x <- cbind(x_train,y_train)

  # Train the model using the training sets and check score

  logistic <- glm(y_train ~ ., data = x,family='binomial')

  summary(logistic)

  #Predict Output

  predicted= predict(logistic,x_test)

  3.決策樹(shù)

  這是我最喜歡的算法之一,我經(jīng)常使用它。 它是一種主要用于分類(lèi)問(wèn)題的監督學(xué)習算法,令人驚訝的是,它可以適用于分類(lèi)和連·續因變量。 在該算法中,我們將群體分為兩個(gè)或多個(gè)均勻集合。 這是基于最重要的屬性/自變量來(lái)做出的并將它們分為不同的組。關(guān)于決策樹(shù)的更多細節,你可以閱讀決策樹(shù)簡(jiǎn)介

    

機器學(xué)習算法的基本知識(使用Python和R代碼)

 

  決策樹(shù)

  在上圖中,您可以看到根據多個(gè)屬性將群體分為四個(gè)不同的群組,以確定用戶(hù)“是否可以玩”。為了 將人口分為不同的特征群體,它使用了諸如Gini,信息增益,卡方,熵等各種技術(shù)。

    

機器學(xué)習算法的基本知識(使用Python和R代碼)

 

  JezzBall

  了解決策樹(shù)如何運作的最佳方法是播放Jezzball - 微軟 的經(jīng)典游戲(下圖)。 大體上就是,來(lái)一起在屏幕上滑動(dòng)手指,筑起墻壁,掩住移動(dòng)的球吧。

  Python Code

  #Import Library

  #Import other necessary libraries like pandas, numpy...

  from sklearn import tree

  #Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset

  # Create tree object

  model = tree.DecisionTreeClassifier(criterion='gini')

  # for classification, here you can change the algorithm as gini or entropy (information gain) by default it is gini

  # model = tree.DecisionTreeRegressor() for regression

  # Train the model using the training sets and check score

  model.fit(X, y)

  model.score(X, y)

  #Predict Output

  predicted= model.predict(x_test)

  R Code

  library(rpart)

  x <- cbind(x_train,y_train)

  # grow tree

  fit <- rpart(y_train ~ ., data = x,method="class")

  summary(fit)

  #Predict Output

  predicted= predict(fit,x_test)

  4.SVM(支持向量機)

  這是一種分類(lèi)方法。 在這個(gè)算法中,我們將每個(gè)數據項目繪制為n維 空間 中的一個(gè)點(diǎn)(其中n是擁有的特征數),每個(gè)特征的值是特定坐標的值。

  例如,如果我們有一個(gè)人的“高度”和“頭發(fā)長(cháng)度”這兩個(gè)特征,我們首先將這兩個(gè)變量繪制在二維空間中,其中每個(gè)點(diǎn)都有兩個(gè)坐標(這些坐標稱(chēng)為支持向量)

    

機器學(xué)習算法的基本知識(使用Python和R代碼)

 

  支持向量機

  現在,我們將找到一些可以將數據分割成兩類(lèi)的線(xiàn)。 而我們想要的線(xiàn),就是使得兩組數據中最近點(diǎn)到分割線(xiàn)的距離最長(cháng)的線(xiàn)。

    

機器學(xué)習算法的基本知識(使用Python和R代碼)

 

  最佳分割 直線(xiàn)

  在上述示例中,將數據分成兩個(gè)不同分類(lèi)的組的線(xiàn)是黑線(xiàn),因為兩個(gè)最接近的點(diǎn)距離線(xiàn)最遠(紅線(xiàn)也可以,但不是一最遠)。 這條線(xiàn)是我們的分類(lèi)器, 然后根據 測試 數據位于線(xiàn)路兩邊的位置,我們可以將新數據分類(lèi)為什么類(lèi)別。

  Python Code

  #Import Library

  from sklearn import svm

  #Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset

  # Create SVM classification object

  model = svm.svc() # there is various option associated with it, this is simple for classification. You can refer link, for mo# re detail.

  # Train the model using the training sets and check score

  model.fit(X, y)

  model.score(X, y)

  #Predict Output

  predicted= model.predict(x_test)

  R Code

  library(e1071)

  x <- cbind(x_train,y_train)

  # Fitting model

  fit <-svm(y_train ~ ., data = x)

  summary(fit)

  #Predict Output

  predicted= predict(fit,x_test)

  5. 樸素貝葉斯

  它是基于貝葉斯定理的分類(lèi)技術(shù),假設預測因子之間是獨立的。 簡(jiǎn)單來(lái)說(shuō),樸素貝葉斯分類(lèi)器假設類(lèi)中特定特征的存在與任何其他特征的存在無(wú)關(guān)。 例如,如果果實(shí)是紅色,圓形,直徑約3英寸,則果實(shí)可能被認為是 蘋(píng)果 。 即使這些特征依賴(lài)于彼此或其他特征的存在,一個(gè)樸素的貝葉斯分類(lèi)器將考慮的是所有屬性來(lái)單獨地貢獻這個(gè)果實(shí)是蘋(píng)果的概率。

  樸素貝葉斯模型易于構建,對于非常大的數據集尤其有用。 除了簡(jiǎn)單之外,樸素貝葉斯也被稱(chēng)為超高級分類(lèi)方法。

  貝葉斯定理提供了一種由P(c),P(x)和P(x | c)計算概率P(c | x)的方法。 看下面的等式

    

機器學(xué)習算法的基本知識(使用Python和R代碼)

 

  樸素貝葉斯

  其中:

  P(c | x)是在x條件下c發(fā)生的概率。

  P(c)是c發(fā)生的概率。

  P(x | c)在c條件下x發(fā)生的概率。

  P(x)是x發(fā)生的概率。

  示例:

  讓我們用一個(gè)例子來(lái)理解它。 下面我有一個(gè)天氣和相應的目標變量“玩游戲”的訓練數據集。 現在,我們需要根據天氣條件對玩家是否玩游戲進(jìn)行分類(lèi)。 我們按照以下步驟執行。

  步驟1:將數據集轉換為頻率表

  步驟2:通過(guò)發(fā)現像“Overcast”概率= 0.29和播放概率為0.64的概率來(lái)創(chuàng )建似然表。

    

機器學(xué)習算法的基本知識(使用Python和R代碼)

 

  例子

  步驟3:現在,使用樸素貝葉斯方程來(lái)計算每個(gè)類(lèi)的概率。 其中概率最高的情況就是是預測的結果。

  問(wèn)題:

  如果天氣晴朗,玩家會(huì )玩游戲,這個(gè)說(shuō)法是正確的嗎?

  我們可以使用上述方法解決,所以P(Yes | Sunny) = P( Sunny | Yes) * P(Yes) / P (Sunny)

  這里,P(Sunny | Yes)= 3/9 = 0.33,P(Sunny)= 5/14 = 0.36,P(Yes)= 9/14 = 0.64

  現在,P(Yes | Sunny)= 0.33 * 0.64 / 0.36 = 0.60,該事件發(fā)生的概率還是比較高的。

  樸素貝葉斯使用類(lèi)似的方法根據各種屬性預測不同分類(lèi)的概率,該算法主要用于文本分類(lèi)和具有多個(gè)類(lèi)的問(wèn)題。

  Python Code

  #Import Library

  from sklearn.naive_bayes import GaussianNB

  #Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset

  # Create SVM classification object model = GaussianNB()

  # there is other distribution for multinomial classes like Bernoulli Naive Bayes, Refer link

  # Train the model using the training sets and check score

  model.fit(X, y)

  #Predict Output

  predicted= model.predict(x_test)

  R Code

  library(e1071)

  x <- cbind(x_train,y_train)

  # Fitting model

  fit <-naiveBayes(y_train ~ ., data = x)

  summary(fit)

  #Predict Output

  predicted= predict(fit,x_test)

  6. KNN (K-近鄰算法)

  它可以用于分類(lèi)和回歸問(wèn)題, 然而,它在行業(yè)中被廣泛地應用于分類(lèi)問(wèn)題。 K-近鄰算法用于存儲所有訓練樣本集(所有已知的案列),并通過(guò)其k個(gè)鄰近數據多數投票對新的數據(或者案列)進(jìn)行分類(lèi)。通常,選擇k個(gè)最近鄰數據中出現次數最多的分類(lèi)作為新數據的分類(lèi)。

  這些計算機的距離函數可以是歐幾里德,曼哈頓,閔可夫斯基和漢明距離。 前三個(gè)函數用于連續函數,第四個(gè)函數用于分類(lèi)變量。 如果K = 1,則簡(jiǎn)單地將該情況分配給其最近鄰的類(lèi)。 有時(shí),選擇K在執行KNN建模時(shí)是一個(gè)難點(diǎn)。

    

機器學(xué)習算法的基本知識(使用Python和R代碼)

 

  K-近鄰算法

  KNN可以輕松映射到我們的現實(shí)生活中。 如果你想了解一個(gè)人,你沒(méi)有任何信息,你可能想知道先去了解他的親密的朋友和他活動(dòng)的圈子,從而獲得他/她的信息!

  選擇KNN之前要考慮的事項:

  KNN在計算上是昂貴的

  變量應該被歸一化,否則更高的范圍變量可以偏移它

  在進(jìn)行KNN之前,預處理階段的工作更像去除離群值、噪聲值

  Python Code

  #Import Library

  from sklearn.neighbors import KNeighborsClassifier

  #Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset

  # Create KNeighbors classifier object model

  KNeighborsClassifier(n_neighbors=6) # default value for n_neighbors is 5

  # Train the model using the training sets and check score

  model.fit(X, y)

  #Predict Output

  predicted= model.predict(x_test)

  R Code

  library(knn)

  x <- cbind(x_train,y_train)

  # Fitting model

  fit <-knn(y_train ~ ., data = x,k=5)

  summary(fit)

  #Predict Output

  predicted= predict(fit,x_test)

  7. K-Means

  它是解決聚類(lèi)問(wèn)題的一種無(wú)監督算法。 其過(guò)程遵循一種簡(jiǎn)單而簡(jiǎn)單的方式,通過(guò)一定數量的聚類(lèi)(假設k個(gè)聚類(lèi))對給定的數據集進(jìn)行分類(lèi)。 集群 內的數據點(diǎn)與對等組是同構的和異構的。

  嘗試從油墨印跡中找出形狀?(見(jiàn)下圖) k means 與這個(gè)活動(dòng)相似, 你通過(guò)墨水漬形狀來(lái)判斷有多少群體存在!

    

機器學(xué)習算法的基本知識(使用Python和R代碼)

 

  K-Means

  下面兩點(diǎn)感覺(jué)原文解釋的不是很清楚,自己然后查了下國內的解釋方法

  K-means如何形成集群

  (1) 從 n個(gè)數據對象任意選擇 k 個(gè)對象作為初始聚類(lèi)中心;

  (2) 根據每個(gè)聚類(lèi)對象的均值(中心對象),計算每個(gè)對象與這些中心對象的距離;并根據最小距離重新對相應對象進(jìn)行劃分;

  (3) 重新計算每個(gè)(有變化)聚類(lèi)的均值(中心對象)

  (4) 循環(huán)(2)到(3)直到每個(gè)聚類(lèi)不再發(fā)生變化為止參考

  例子

  K-Means例子

  從上圖中,我們可以看到,A,B,C,D,E是五個(gè)在圖中點(diǎn)。而灰色的點(diǎn)是我們的種子點(diǎn),也就是我們用來(lái)找點(diǎn)群的點(diǎn)。有兩個(gè)種子點(diǎn),所以K=2。

  然后,K-Means的算法如下:

  隨機在圖中取K(這里K=2)個(gè)種子點(diǎn)。

  然后對圖中的所有點(diǎn)求到這K個(gè)種子點(diǎn)的距離,假如點(diǎn)Pi離種子點(diǎn)Si最近,那么Pi屬于Si點(diǎn)群。(上圖中,我們可以看到A,B屬于上面的種子點(diǎn),C,D,E屬于下面中部的種子點(diǎn))

  接下來(lái),我們要移動(dòng)種子點(diǎn)到屬于他的“點(diǎn)群”的中心。(見(jiàn)圖上的第三步)

  然后重復第2)和第3)步,直到,種子點(diǎn)沒(méi)有移動(dòng)(我們可以看到圖中的第四步上面的種子點(diǎn)聚合了A,B,C,下面的種子點(diǎn)聚合了D,E)。 參考

  K值如何確定

  在實(shí)際應用中,由于Kmean一般作為數據預處理,或者用于輔助分聚類(lèi)貼標簽。所以k一般不會(huì )設置很大??梢酝ㄟ^(guò)枚舉,令k從2到一個(gè)固定值如10,在每個(gè)k值上重復運行數次kmeans(避免局部最優(yōu)解),并計算當前k的平均輪廓系數,最后選取輪廓系數最大的值對應的k作為最終的集群數目。參考

  我們知道隨著(zhù)群集數量的增加,該值不斷減少,但是如果繪制結果,則可能會(huì )發(fā)現平方距離的總和急劇下降到k的某個(gè)值,然后再慢一些。 在這里,我們可以找到最佳聚類(lèi)數。

    

機器學(xué)習算法的基本知識(使用Python和R代碼)

 

  k值

  Python Code

  #Import Library

  from sklearn.cluster import KMeans

  #Assumed you have, X (attributes) for training data set and x_test(attributes) of test_dataset

  # Create KNeighbors classifier object model

  k_means = KMeans(n_clusters=3, random_state=0)

  # Train the model using the training sets and check score

  model.fit(X)

  #Predict Output

  predicted= model.predict(x_test)

  R Code

  library(cluster)

  fit <- kmeans(X, 3) # 5 cluster solution

  8. Random Forest(隨機樹(shù)林)

  隨機森林(Random Forest)是一個(gè)包含多個(gè)決策樹(shù)的分類(lèi)器, 其輸出的類(lèi)別由個(gè)別樹(shù)輸出類(lèi)別的眾數而定。(相當于許多不同領(lǐng)域的專(zhuān)家對數據進(jìn)行分類(lèi)判斷,然后投票)

    

機器學(xué)習算法的基本知識(使用Python和R代碼)

 

  隨機樹(shù)林

  感覺(jué)原文沒(méi)有將什么實(shí)質(zhì)內容,給大家推進(jìn)這一篇 Random Forest入門(mén)

  9. 降維算法

  在過(guò)去的4-5年中, 數據挖掘 在每個(gè)可能的階段都呈指數級增長(cháng)。 公司/政府機構/研究機構不僅有新的來(lái)源,而且他們正在非常詳細地挖掘數據。

  例如: 電子商務(wù) 公司正在捕獲更多關(guān)于客戶(hù)的細節,例如人口統計,網(wǎng)絡(luò )爬網(wǎng)歷史,他們喜歡或不喜歡的內容,購買(mǎi)歷史記錄,反饋信息等等,給予他們個(gè)性化的關(guān)注,而不是離你最近的雜貨店主。

  作為數據科學(xué)家,我們提供的數據還包括許多功能,這對建立良好的穩健模型是非常有用的,但是有一個(gè)挑戰。 你如何識別出1000或2000年高度重要的變量? 在這種情況下,維數降低算法可以幫助我們與決策樹(shù),隨機森林,PCA,因子分析,基于相關(guān)矩陣,缺失值比等的其他算法一起使用。

  要了解更多有關(guān)此算法的信息,您可以閱讀 “ Beginners Guide To Learn Dimension Reduction Techniques “.

  Python Code

  #Import Library

  from sklearn import decomposition

  #Assumed you have training and test data set as train and test

  # Create PCA obeject pca= decomposition.PCA(n_components=k) #default value of k =min(n_sample, n_features)

  # For Factor analysis

  #fa= decomposition.FactorAnalysis()

  # Reduced the dimension of training dataset using PCA

  train_reduced = pca.fit_transform(train)

  #Reduced the dimension of test dataset

  test_reduced = pca.transform(test)

  For more detail on this, please refer this link.

  R Code

  library(stats)

  pca <- princomp(train, cor = TRUE)

  train_reduced <- predict(pca,train)

  test_reduced <- predict(pca,test)

  10. Gradient Boosting & AdaBoost

  當我們處理大量數據以預測高預測能力時(shí),GBM&AdaBoost是更加強大的算法。 Boosting是一種綜合學(xué)習算法,它結合了幾個(gè)基本估計器的預測,以提高單個(gè)估計器的魯棒性。 它將多個(gè)弱或平均預測值組合到一個(gè)強大的預測變量上。 這些提升算法在數據科學(xué)比賽中總是能夠很好地運行,如Kaggle,AV Hackathon,CrowdAnalytix。

  More: Know about Gradient and AdaBoost in detail

  Python Code

  #Import Library

  from sklearn.ensemble import GradientBoostingClassifier

  #Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset

  # Create Gradient Boosting Classifier object

  model= GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)

  # Train the model using the training sets and check score

  model.fit(X, y)

  #Predict Output

  predicted= model.predict(x_test)

  R Code

  library(caret)

  x <- cbind(x_train,y_train)

  # Fitting model

  fitControl <- trainControl( method = "repeatedcv", number = 4, repeats = 4)

  fit <- train(y ~ ., data = x, method = "gbm", trControl = fitControl,verbose = FALSE)

  predicted= predict(fit,x_test,type= "prob")[,2]

  結束語(yǔ)

  現在我相信,你會(huì )有一個(gè)常用的機器學(xué)習算法的想法。 我在寫(xiě)這篇文章和提供R和Python中的代碼的唯一意圖就是讓你馬上開(kāi)始。 如果您想要掌握機器學(xué)習,請將算法運用實(shí)際問(wèn)題,體會(huì )其中的樂(lè )趣



關(guān)鍵詞: 機器學(xué)習 Python

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>