目錄node
1、分類算法簡介python
2、KNN算法算法
3、貝葉斯分類算法dom
4、決策樹算法機器學習
5、隨機森林算法分佈式
6、SVM算法函數
1、分類算法簡介oop
一、概念學習
1.1 監督學習(Supervised Learning)測試
從給定標註(訓練集有給出明確的因變量Y)的訓練數據集中學習出一個函數,根據這個函數爲新數據進行標註。
1.2 無監督學習(Unsupervised Learning)
從給定無標註(訓練集無明確的因變量Y)的訓練數據中學習出一個函數,根據這個函數爲全部數據標註。
1.3 分類 (Classification)
分類算法經過對已知類別訓練數據集的分析,從中發現分類規則,以此預測新數據的類別,分類算法屬於監督學習。
二、經常使用的分類算法
三、分類問題的驗證方法
2、KNN算法
一、KNN算法簡介
K近鄰分類算法(k-Nearest Neighbors):從訓練集中找到和新數據最接近的K條記錄,而後根據他們的主要分類來決定新數據的類別。
KNN算法屬於最簡單的機器學習算法之一,核心思想是每一個樣本均可以用它最接近的k個鄰近值來表明,即若是一個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別,並具備這個類別上樣本的特性。因此KNN算法的結果很大程度商取決於K的選擇。
二、算法的優缺點
2.1 優勢
2.2 缺點
三、python中的實現過程
以iris數據集爲例,基於python中sklearn包實現KNN分類
【iris數據集:經常使用的分類實驗數據集,即鳶尾花卉數據集,是一個多重變量數據集,經過包含的4個屬性(花萼長度、花萼寬度、花瓣長度、花瓣寬度)來預測屬於三類鳶尾花中的哪一類。】
#python的sklearn包中自帶了iris數據集
from sklearn import datasets iris = datasets.load_iris()
獲得如下類型的數據,共有150行,包含特徵屬性(feature_names)、特徵數據(data)、目標分類名稱(target_names)、目標類別(target)
KNN分類建模的具體代碼:
#切分訓練集 from sklearn.model_selection import train_test_split #將數據集按7:3切分爲訓練集和測試集(特徵變量和目標變量) data_train, data_test, target_train, target_test = train_test_split( iris.data, #特徵數據 iris.target, #目標數據 test_size=0.3) #測試集佔比 # KNN建模(1折交叉驗證) from sklearn import neighbors knnmodel = neighbors.KNeighborsClassifier(n_neighbors=3) #n_neighbors參數爲分類個數 knnmodel.fit(data_train,target_train) knnmodel.score(data_train,target_train) # 5折交叉驗證 from sklearn.model_selection import cross_val_score #cross_val_score函數傳入模型、特徵數據、目標數據和 K值 cross_val_score(knnmodel,iris.data,iris.target,cv=5) #模型預測,獲得分類結果 knnmodel.predict([[0.1,0.2,0.3,0.4]])
3、貝葉斯分類算法
一、貝葉斯分類算法簡介
貝葉斯分類算法(NB):是統計學的一種分類方法,它是利用貝葉斯定理的機率統計知識,對離散型數據進行分類的算法。
樸素貝葉斯(Naive Bayes Classifier)的思想基礎是這樣的:對於給出的待分類項,求解在此項出現的條件下各個類別出現的機率,哪一個最大,就認爲此待分類項屬於哪一個類別。
貝葉斯定理:
tips:python中sklearn包的naive_bayes模塊中,有三種貝葉斯算法類型:
二、算法的優缺點
2.1 優勢
2.2 缺點
三、python中的實現過程
使用多項式貝葉斯算法進行文本分類的
#創建含多篇文本的語料庫,並指定文本類別——文本分詞——文本向量化
#多項式貝葉斯建模
from sklearn.naive_bayes import MultinomialNB #多項式貝葉斯分類模型創建 MNBmodle = MultinomialNB() #將文本向量做爲特徵值傳入,將分類序列做爲目標序列傳入 MNBmodle.fit(textVector,corpos['class']) MNBmodle.score(textVector,corpos['class'])
#傳入新文本,向量化後進行分類預測
#傳入新文本進行分類測試 newTexts = [''' 據介紹,EliteBook 840 G4是一款採用14英寸1080p屏幕的商務筆記本, 硬件配置方面,入門級的EliteBook 840 G4搭載Intel Core i3-7100處理器, 配備4GB內存和500GB機械硬盤,預裝Windows 10操做系統。 高端機型可選擇更大容量的內存和SSD固態硬盤。 機身四周提供了USB 3.0、USB-C、DisplayPort、15針迷你D-Sub, 支持藍牙4.2和802.11ac Wi-Fi。 整機重1.48千克。 '''] #對新內容分詞 for i in range(len(newTexts)): newTexts[i] = " ".join(jieba.cut(newTexts[i])) #新內容的文本向量 newTextVector = countVectorizer.transform(newTexts) #進行預測 MNBmodle.predict(newTextVector)
4、決策樹算法
一、決策樹算法簡介
決策樹算法(Decision Tree):經過對訓練樣本的學習,並創建分類規則,而後依據分類規則,對新樣本數據進行分類預測。
決策樹是在已知各類狀況發生機率的基礎上,經過構成決策樹來求取淨現值的指望值大於等於零的機率,評價項目風險,判斷其可行性的決策分析方法,是直觀運用機率分析的一種圖解法。
決策樹是一種樹形結構,其中每一個內部節點表示一個屬性上的測試,每一個分支表明一個測試輸出,每一個葉節點表明一種類別。
二、算法的優缺點
2.1 優勢
2.2 缺點
三、python中的實現過程
基於sklearn包的決策樹建模
#將訓練集中的離散變量虛擬化
dummycolumns = ['data3','data4'] for column in dummycolumns: data[column] = data[column].astype('category') dummydata = pd.get_dummies(data, columns=dummycolumns, prefix=dummycolumns, prefix_sep='=', drop_first=True)
#構建模型
#特徵變量 fdata = dummydata[['data1','data2','data3_dummy','data_dummy']] #目標變量 tdata = dummydata['target'] #構建模型 from sklearn.tree import DecisionTreeClassifier dtmodel = DecisionTreeClassifier(max_leaf_nodes=8) #最大葉數爲8 #模型驗證 from sklearn.model_selection import cross_val_score cross_val_score(dtmodel,fdata,tdata,cv=10) #交叉驗證10次 #模型訓練 dtmodel.fit(fdata,tdata)
#繪製決策樹圖(須要下載安裝graphviz軟件 並 安裝pydot包,可參考http://wenda.chinahadoop.cn/question/5518)
from sklearn.tree import export_graphviz with open(r'D:\...\data.dot','w') as f: f = export_graphviz(dtmodel, out_file=f) import pydot from sklearn.externals.six import StringIO dot_data = StringIO() export_graphviz( dtmodel, #模型名稱 out_file=dot_data, #圖形數據的輸出路徑 class_names=['A','B'], #目標屬性的名稱 feature_names=['a','b','c','d'], #特徵屬性的名稱 filled=True, #是否使用顏色填充 rounded=True, #邊框是否圓角 special_characters=True) #是否有特殊字符(含中文就算) graph = pydot.graph_from_dot_data(dot_data.getvalue()) graph.get_node('node')[0].set_fontname('Microsoft YaHei') graph.write_png(r'D:\...\決策樹.png') #輸出圖形
最終獲得以下圖的決策樹:
5、隨機森林算法
一、隨機森林算法簡介
隨機森林(RandomForest):是一個包含多個決策樹的分類器,而且其輸出的類別是由個別樹輸出的類別的衆數而定。
隨機森林幾乎能預測任何數據類型的問題,它是一個相對較新的機器學習方法。
二、算法的優缺點
2.1 優勢
2.2 缺點
隨機森林已經被證實在某些噪音較大的分類或迴歸問題上會過擬
對於有不一樣取值的屬性的數據,取值劃分較多的屬性會對隨機森林產生更大的影響,因此隨機森林在這種數據上產出的屬性權值是不可信的。
三、python中的實現過程
#因爲隨機森林基於決策樹算法,因此數據處理步驟與決策樹算法相同
#模型構建
#模型構建 from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import cross_val_score #比較決策樹模型和隨機森林模型的評分好壞 dtmodel = DecisionTreeClassifier() dtscroe = cross_val_score(dtmodel,fdata,tdata,cv=10) dtscroe.mean() rfcmodel = RandomForestClassifier() rfcscore = cross_val_score(rfcmodel,fdata,tdata,cv=10) rfcscore.mean() #評分優於決策樹算法
#隨機森林模型評分存在閾值,當決策樹算法通過參數調優後,模型評分能夠達到該閾值
#進行參數調優 dtmodel = DecisionTreeClassifier(max_leaf_nodes=8) dtscroe = cross_val_score(dtmodel,fdata,tdata,cv=10) dtscroe.mean() #評分明顯提升 rfcmodel = RandomForestClassifier(max_leaf_nodes=8) rfcscore = cross_val_score(rfcmodel,fdata,tdata,cv=10) rfcscore.mean() #基本與決策樹一致
6、SVM算法
一、SVM算法簡介
支持向量機(Support Vector Machine,即SVM):是一種二分類算法,屬於通常化線性分類器,這類分類器的特色是可以同時最小化經驗偏差與最大化幾何邊緣區,所以SVM也被稱爲最大邊緣區分類器。
其主要思想爲找到空間中的一個可以將全部數據樣本劃開的超平面,而且使得樣本集中全部數據到這個超平面的距離最短
它在解決小樣本、非線性及高維模式識別中表現出許多特有的優點,並可以推廣應用到函數擬合等其餘機器學習問題中
二、算法的優缺點
2.1 優勢
2.2 缺點
SVM算法對大規模訓練樣本難以實施
用SVM解決多分類問題存在困難
三、python中的實現過程
python中SVM模型能夠分爲三種:svm.LinearSVC、svm.NuSVC、svm.SVC
#根據數據構建簡單SVM模型(無參數調優)
from sklearn import svm from sklearn import cross_validation #根據三種方式分別建模,獲得模型評分 svmmodel1 = svm.SVC() cross_validation.cross_val_score(svmmodel1,fdata,tdata,cv=3) svmmodel2 = svm.NuSVC() cross_validation.cross_val_score(svmmodel2,fdata,tdata,cv=3) svmmodel3 = svm.LinearSVC() cross_validation.cross_val_score(svmmodel3,fdata,tdata,cv=3) #LinearSVC 評分最好,因此使用該方法建模 svmmodel = svm.LinearSVC() svmmodel.fit(fdata,tdata) svmmodel.score(fdata,tdata)