什么是機器學習?
1、像人:機器學習就像人類的思考過程和決策過程一樣,讓系統自己從數據中學習,讓機器變得更加聰明
2、依賴數據:機器學習是通過編程讓計算機從數據中進行學習的科學,大數據將會使得機器學習領域更加具有競爭力
3、應用:機器學習與許多領域的處理技術結合,形成了計算機視覺,語音識別、自然語言處理等交叉領域。
4、強人工智能:完全人工智能,指的是能夠勝任人類的所有工作的人工智能,具有決策能力、學習能力、知識表達能力等,但強人工智能的實現具有一定的挑戰性,計算許多海量的數據進行分析,分析較為復雜時,還得借助超級計算機
一個完整的機器學習項目流程
1、理解實際問題:抽象為機器學習能處理的數學模型
2、數據獲取及其分析和預處理:用numpy、pandas進行數據觀測,如果數據過大可以用tensorflow分布式
3、特征工程:從原始數據中進行特征構建、特征提取、特征選擇
4、模型的選擇及調優:過擬合和欠擬合是模型診斷中重要的問題
5、模型融合
6、上線運行
機器學習中用到的數學
梯度下降法:曲面上方向導數的最大值的方向就代表了梯度的方向,因此我們在做梯度下降的時候,應該沿着梯度的反方向進行權重的更新,直到有效的找到全局的最優解。梯度下降用於解決優化問題。
特征工程
特征工程就是把一個原始數據變成機器學習可以用的數據的一個過程,能夠使得算法的效果和性能得到顯著的提升。
1、離散值處理:LabelEncoder:可以用[中國、美國、日本]轉化為[0,1,2],但這樣會出現一個問題,中國和日本的平均值就等於美國了。決策樹和隨機森林等算法可以直接處理這樣的類型的特征,並且這種方法使用的特征空間很少。
One-hot Encoding:One-hot編碼是分裂變量作為二進制向量的表示。然后將離散特征的取值擴展到了歐式空間,離散特征的某個取值就對應歐式空間的某個點。優勢很明顯,更容易被機器所理解,但是高維度是個嚴重地問題,對於類別值多的特征來說更加明顯,高維災難,模型更加復雜。因此要降維。
二值特征、多項式特征、binning特征
2、日期特征:pandas(d.days\d.month\d.year):將時間的相關特征盡可能的提取
3、文本特征(難度:怎么讓機器讀懂):nltk包、jieba分詞,這里可以用k-means模型、N-G模型、TF-IDF模型、word2Vec模型
4、圖像特征:通道數(即顏色通道,通常為rgb三重,灰色的為1重)、三維向量
為什么要使用機器學習?
1、需要進行大量手工調整或需要擁有長串規則才能解決的問題,
2、機器學習算法可以通過簡化代碼,提高性能;
3、問題復雜,傳統方法難以解決;
4、環境有波動,機器學習算法可以使用新數據;
5、洞察復雜問題和大量數據
機器學習的主要挑戰:
1、訓練數據不足
2、不相關特征,沒有代表的訓練數據(樣本偏差)
3、低質量的數據(有噪聲)、不相關的特征(進行特征工程)
4、過擬合(泛化能力差)和欠擬合(在訓練數據和測試數據上的性能都不是很好)
解決過擬合的方法有:
1、簡化模型,這包括了采用簡單點的模型,減少特征數把以及限制模型,即采用正則化;
2、增強訓練數據;減少訓練數據的噪聲,進行數據數據清理,比如修正數據錯誤和去除異常值等
欠擬合解決方法:
1、選擇一個更強大的模型,帶有更好的參數;
2、用更好的特征進行訓練學習(特征工程);
3、減少對模型的限制(比如減小正則化超參數)
線性回歸:
線性回歸是利用稱為線性回歸方程的最小平方函數對一個或多個自變量和因變量之間關系進行建模的一種回歸。通過訓練數據集尋找參數的最優解,常見的最優解的方法有最小二乘法和梯度下降法。(回歸算法)
優點:結果易於理解,計算上不復雜
缺點:對非線性的數據擬合不好
應用數據類型:數值型和標稱型數據
邏輯回歸
是基於Sigmoid函數,或者說Sigmoid就是邏輯回歸函數,可以用梯度下降算法來求解代價函數最小的參數。(二分類)
優點:實現簡單,廣泛應用於工業問題上;分類時計算量非常小,速度快,存儲資源低;便於觀測樣本概率分數;對邏輯回歸問題,多重共線性並不是問題,它可以結合L2正則化來解決該問題。
缺點:容易過擬合,一般精確度不高;只能處理二分類問題(在此基礎上衍生出的softmax可以用於處理多分類),且必須線性可分;特征空間很大時,邏輯回歸的性能不是很好;不能很好地處理大量多類特征或向量;對於非線性特征,需要進行轉換。
決策樹
分類決策樹模型時一種描述對實例進行分類的樹形結構,決策樹由結點和有向邊組成。結點有兩種類型:內部結點和葉節點。內部結點表示一個特征或者屬性,葉節點表示一個類。
決策樹的生成對應於模型的局部選擇,決策樹的剪枝對應於模型的全局選擇。決策樹的生成只考慮局部最優,相對地,決策樹的剪枝則考慮全局最優。
步驟:特征選擇、決策樹的生成(ID3、C4.5)、決策樹的剪枝
特征選擇的准則:信息增益和信息增益比(信息增益的缺點:在偏向選擇取值較多的特征的問題)
優點:
1、計算量簡單,可解釋性強,比較適合處理缺失屬性值的樣本,能夠處理不相關的特征;
2、效率高,決策樹只需要一次構建,可反復使用;訓練時間復雜度低,預測的過程比較快。
缺點:
1、單顆決策樹分類能力弱,並且對連續值變量難以處理;
2、容易過擬合(后續出現了隨機森林,減小了過擬合現象);
3、可能或陷於局部最小值中
4、沒有在線學習
過擬合問題
1、剪枝:造成的泛化能力不行,因此,減掉一些樹葉,使得模型的泛化能力更強。預剪枝是在決策樹的生成過程中進行的;后剪枝是在決策樹生成之后進行的。
2、交叉驗證
3、隨機森林
應用領域
企業管理實踐,企業投資決策,由於決策樹很好的分析能力,在決策過程應用較多。
隨機森林
隨機森林是指利用多棵樹對樣本訓練並預測的一種分類器。使用的訓練集是從總的訓練集中有放回的采樣出來的,用的特征是從所有特征中按照一定比例隨機地無放回的抽取的。
優點
1、在數據集上表現良好,在當前的很多數據集上,相對其他算法有着很大的優勢
2、它能夠處理很高維度(特征很多)的數據,並且不用做特征選擇
3、可以評估特征的重要性
4、在創建隨機森林的時候,對 generlization error 使用的是無偏估計
5、訓練速度快,容易做成並行化方法
6、在訓練過程中,能夠檢測到特征間的互相影響
7、實現比較簡單
8、對於不平衡的數據集來說,它可以平衡誤差。
9、可以應用在特征缺失的數據集上,並仍然有不錯的性能
缺點
1、隨機森林已經被證明在某些噪音較大的分類或回歸問題上會過擬
2、對於有不同取值的屬性的數據,取值划分較多的屬性會對隨機森林產生更大的影響,所以隨機森林在這種數據上產出的屬性權值是不可信的。
支持向量機(SVM)
SVM在數據挖掘中:用SVM解決多分類問題存在困難,但可以通過多個二分支持向量機的組合來解決
定義:SVM是二分類模型,其模型定義為特征空間上的間隔最大的線性分類器,即支持向量機的學習策略是間隔最大化。基於核的算法把輸入數據映射到一個高階的向量空間, 在這些高階向量空間里, 有些分類或者回歸問題能夠更容易的解決。
訓練數據線性可分時,通過硬間隔最大化,學習一個線性分類器,即線性可分支持向量機,又稱為硬間隔支持向量機;訓練數據近似線性可分時,通過軟間隔最大化,也學習一個線性分類器,即線性支持向量機,也稱為軟間隔支持向量機;訓練數據線性不可分時,通過使用核技巧和軟間隔最大化,學習非線性支持向量機。
注:核函數並不是一種映射,它只是用來計算映射到高維空間后數據內積的一種方法
優點:
1、使用核函數可以向高維空間進行映射
2、使用核函數可以解決非線性的分類
3、分類思想很簡單,就是將樣本與決策面的間隔最大化
4、分類效果較好
缺點
1、對大規模數據訓練比較困難
2、無法直接支持多分類,但是可以使用間接的方法來做
3、噪聲也會影響SVM的性能,因為SVM主要是由少量的支持向量決定的。
SVM應用領域
文本分類、圖像識別、主要二分類領域
朴素貝葉斯
基於貝葉斯定力與特征條件獨立假設的分類方法。算法的基礎是概率問題,分類原理是通過某對象的先驗概率,利用貝葉斯公式計算出其后驗概率,即該對象屬於某一類的概率,選擇具有最大后驗概率的類作為該對象所屬的類。朴素貝葉斯假設是約束性很強的假設,假設特征條件獨立,但朴素貝葉斯算法簡單,快速,具有較小的出錯率。
朴素貝葉斯根據特征是否離散,分為三種模型,如下所示:
1、貝葉斯估計/多項式模型:當特征是離散的時候,使用該模型;
2、高斯模型:特征是連續的時候采用該模型;
3、伯努利模型:特征是離散的,且取值只能是 0 和 1。
優點:對小規模的數據表現很好,適合多分類任務,適合增量式訓練。
缺點:對輸入數據的表達形式很敏感(離散、連續,值極大極小之類的)。
K-means
K-均值是最普及的聚類算法,算法接受一個未被標記的數據集,然后將數據集聚類成不同的組。
K-均值是一個迭代算法,假設我們想要將數據聚類成 n 個組,其方法為:
1、首先選擇 K 個隨機的點,稱其為聚類中心
2、計算每個點分別到k個聚類中心的聚類
3、計算每一個組的平均值(質心),將該組所關聯的中心點移動到平均值的位置
4、重復步驟 2-3,直到中心點不再變化
優點
1、k-means 算法是解決聚類問題的一種經典算法,算法簡單、快速。
2、對處理大數據集,該算法是相對可伸縮的和高效率的,因為它的復雜度大約是 O(nkt),其中 n 是所有對象的數目,k 是簇的數目, t 是迭代的次數。通常 k<<n。這個算法通常局部收斂。
3、算法嘗試找出使平方誤差函數值最小的k個划分。當簇是密集的、球狀或團狀的,且簇與簇之間區別明顯時,聚類效果較好。
缺點
1、k-平均方法只有在簇的平均值被定義的情況下才能使用,且對有些分類屬性的數據不適合。
2、要求用戶必須事先給出要生成的簇的數目 。
3、對初值敏感,對於不同的初始值,可能會導致不同的聚類結果。
4、不適合於發現非凸面形狀的簇,或者大小差別很大的簇。
5、對於"噪聲"和孤立點數據敏感,少量的該類數據能夠對平均值產生極大影響。
KNN算法
k 近鄰(KNN)是一種基本分類與回歸方法。
其思路如下:給一個訓練數據集和一個新的實例,在訓練數據集中找出與這個新實例最近的 k個訓練實例,然后統計最近的 k個訓練實例中所屬類別計數最多的那個類,就是新實例的類。其流程如下所示:
計算訓練樣本和測試樣本中每個樣本點的距離(常見的距離度量有歐式距離,馬氏距離等);
KNN算法的優點
1、KNN是一種在線技術,新數據可以直接加入數據集而不必進行重新訓練
2、KNN理論簡單,容易實現,可用於非線性分類;
訓練時間復雜度比支持向量機之類的算法低,僅為O(n),該算法比較適用於樣本容量比較大的類域的自動分類,但那些樣本容量較小的類域采用這種算法比較容易產生誤分
3)訓練時間復雜度為O(n);
4)理論成熟,思想簡單,既可以用來做分類也可以用來做回歸。
KNN算法的缺點
1、對於樣本容量大的計算量比較大,需要大內存
2、樣本不平衡時,預測偏差比較大。如:當樣本不平衡時,如一個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本占多數。
3、KNN每一次分類都會重新進行一次全局運算。
4、k值大小的選擇。需要預先設定,而不能自適應
KNN算法應用領域
文本分類、模式識別、聚類分析,多分類領域,適用於對樣本容量比較大的類域進行自動分類。
原理:
分類思想比較簡單,從訓練樣本中找出K個與其最相近的樣本,然后看這k個樣本中哪個類別的樣本多,則待判定的值(或說抽樣)就屬於這個類別。
KNN將測試集的數據特征與訓練集的數據進行特征比較,然后算法提取樣本集中特征最近鄰數據的分類標簽,即KNN算法采用測量不同特征值之間的距離的方法進行分類。KNN的思路很簡單,就是計算測試數據與類別中心的距離。KNN具有精度高、對異常值不敏感、無數據輸入假定、簡單有效的特點,但其缺點也很明顯,計算復雜度太高。要分類一個數據,卻要計算所有數據,這在大數據的環境下是很可怕的事情。而且,當類別存在范圍重疊時,KNN分類的精度也不太高。所以,KNN比較適合小量數據且精度要求不高的數據。
KNN有兩個影響分類結果較大的函數,一個是數據歸一化,一個是距離計算。如果數據不進行歸一化,當多個特征的值域差別很大的時候,最終結果就會受到較大影響;第二個是距離計算。這應該算是KNN的核心了。目前用的最多的距離計算公式是歐幾里得距離,也就是我們常用的向量距離計算方法。
AdaBoost
AdaBoost算法優點
1、很好的利用了弱分類器進行級聯。
2、可以將不同的分類算法作為弱分類器。
3、AdaBoost具有很高的精度。
4、相對於bagging算法和Random Forest算法,AdaBoost充分考慮的每個分類器的權重。
Adaboost算法缺點
1、AdaBoost迭代次數也就是弱分類器數目不太好設定,可以使用交叉驗證來進行確定。
2、數據不平衡導致分類精度下降。
3、訓練比較耗時,每次重新選擇當前分類器最好切分點。
AdaBoost應用領域
目前AdaBoost算法廣泛的應用於人臉檢測、目標圖像識別等領域。,用於二分類和多分類場景
原理:
AdaBoost是boosting算法的代表分類器。boosting基於元算法(集成算法)。Adaboost是一種迭代算法,其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然后把這些弱分類器集合起來,構成一個更強的最終分類器(強分類器)。其算法本身是通過改變數據分布來實現的,它根據每次訓練集之中每個樣本的分類是否正確,以及上次的總體分類的准確率,來確定每個樣本的權值。
整個過程如下所示:
1. 先通過對N個訓練樣本的學習得到第一個弱分類器;
2. 將分錯的樣本和其他的新數據一起構成一個新的N個的訓練樣本,通過對這個樣本的學習得到第二個弱分類器;
3. 將都分錯了的樣本加上其他的新樣本構成另一個新的N個的訓練樣本,通過對這個樣本的學習得到第三個弱分類器;
4. 如此反復,最終得到經過提升的強分類器。
神經網絡
神經網絡優點
1、分類准確度高,學習能力極強。
2、對噪聲數據魯棒性和容錯性較強。
3、有聯想能力,能逼近任意非線性關系。
神經網絡缺點
1、神經網絡參數較多,權值和閾值。
2、黑盒過程,不能觀察中間結果。
3、學習過程比較長,有可能陷入局部極小值。
人工神經網絡應用領域
目前深度神經網絡已經應用與計算機視覺,自然語言處理,語音識別等領域並取得很好的效果。
Apriori算法
Apriori算法是一種挖掘關聯規則的算法,用於挖掘其內含的、未知的卻又實際存在的數據關系,其核心是基於兩階段頻集思想的遞推算法 。
Apriori是關聯分析中比較早的一種方法,主要用來挖掘那些頻繁項集合。其思想是:
1. 如果一個項目集合不是頻繁集合,那么任何包含它的項目集合也一定不是頻繁集合;
2. 如果一個項目集合是頻繁集合,那么它的任何非空子集也是頻繁集合;
Aprioir需要掃描項目表多遍,從一個項目開始掃描,舍去掉那些不是頻繁的項目,得到的集合稱為L,然后對L中的每個元素進行自組合,生成比上次掃描多一個項目的集合,該集合稱為C,接着又掃描去掉那些非頻繁的項目,重復…
Apriori算法分為兩個階段:
1)尋找頻繁項集
2)由頻繁項集找關聯規則
算法缺點:
1) 在每一步產生侯選項目集時循環產生的組合過多,沒有排除不應該參與組合的元素;
2) 每次計算項集的支持度時,都對數據庫中的全部記錄進行了一遍掃描比較,需要很大的I/O負載。
CUDA及其加速計算
CUDA是一個方便我們編寫代碼調用GPU的框架,是顯卡廠商Nvida推出的運行平台,該架構使GPU能夠解決復雜的計算問題,很多底層通用代碼已經集成,可以減少編程的工作量
map-reduce、spark使用
map-reduce都是分布式計算框架,相對於傳統的分布式計算來說,兩者給程序員提供了方便的分布式計算環境
區別:
1、Hadoop MapReduce采用多進程模型,Spark采用多線程模型
2、MapReduce適合批處理,對時效性不高的離線計算,因為他在計算的時候會將計算中間結果寫在磁盤中,I/O消耗大
3、Spark基於內存的計算框架,直接在內存中完成計算