数据挖掘 —— 有监督学习(分类)
生活随笔
收集整理的這篇文章主要介紹了
数据挖掘 —— 有监督学习(分类)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
數(shù)據(jù)挖掘 —— 有監(jiān)督學習(分類)
- 1. KNN分類算法
- 2. 決策樹分類算法
- 3. SVM算法簡介
- 4. 分類——集成算法
- 4.1 隨機森林參數(shù)介紹
- 4.2 Adaboost算法參數(shù)介紹
- 5 總結(jié)
1. KNN分類算法
- 預備知識:KD-Tree算法 (KDimensional Tree)
- 在空間中尋找與目標點距離最近的k個點
- from sklearn.neighbors import NearestNeighbors
- ‘ball_tree’ will use BallTree
- ‘kd_tree’ will use KDTree
- ‘brute’ will use a brute-force search.
- ‘a(chǎn)uto’ will attempt to decide the most appropriate algorithm based on the values passed to fit method.
2. 決策樹分類算法
- 葉節(jié)點:標注 內(nèi)部節(jié)點:特征
- 決定特征順序的方法:
- 幾個問題:
3. SVM算法簡介
-
超平面:WT?x+B=0W^T*x + B = 0WT?x+B=0
-
分界面: WT?x(p)+b>=1WT?x(n)+b<=?1W^T*x(p)+b >= 1\\ W^T*x(n)+b <= -1WT?x(p)+b>=1WT?x(n)+b<=?1
-
若樣本線性可分則采用線性支持向量機
-
若不符合線性可分,則可采取以下兩個思路:
- 核函數(shù):
-
相比于決策樹 SVM的邊界更加平滑
-
解決多分類問題:
4. 分類——集成算法
4.1 隨機森林參數(shù)介紹
from sklearn.ensemble import RandomForestClassifier
RandomForestClassifier()
- n_estimators:決策樹的個數(shù)
- criterion: 決定特征順序的方法:“gini”,“entropy”,默認使用gini
- max_features:每棵樹的特征
int:特征數(shù)
float:所用特征比例 比如0.8
“auto”:默認使用的方式 即取根號
“sqrt”:取根號
“l(fā)og2”
None: 取全量特征 - bootstrap:有放回的取樣 或者取全量 True為有放回取樣 False為取全樣
- oob_score:若有放回取樣時,沒有取到的數(shù)據(jù)將被用于評估整體模型的準確性 True/False
- n_jobs:并行數(shù)量 默認1 若為-1,則一起并行
4.2 Adaboost算法參數(shù)介紹
from sklearn.ensemble import AdaBoostClassifier(base_estimator,n_estimators,learing_rate,algorithm)
- base_estimator:弱分類器 默認為DecisionTreeClassifier
- n_estimators:默認為50個
- algorithm:{SAMME,SAMME.R},默認為使用SAMM.R,即分類器基于概率分類,若使用不是基于概率分類的分類器,則使用SAMME
- learning_rate:權值的衰減率
5 總結(jié)
import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score,recall_score,precision_score,f1_score from sklearn.naive_bayes import GaussianNB,BernoulliNB from sklearn.externals import joblib from sklearn.tree import DecisionTreeClassifier from sklearn.svm import SVC from sklearn.ensemble import RandomForestClassifier from sklearn.ensemble import AdaBoostClassifierfeatures = pd.read_excel("./data.xlsx",sheet_name = "features") feature_names = features.columns.values features = features.values label = pd.read_excel("./data.xlsx",sheet_name = "label").values# 訓練集拆分 X_tt,X_validation,Y_tt,Y_validation = train_test_split(features,label,test_size = 0.2) X_train,X_test,Y_train,Y_test = train_test_split(X_tt,Y_tt,test_size = 0.25)models = [] # 添加 KNN 分類模型 models.append(("KNN",KNeighborsClassifier(n_neighbors = 3))) # 添加GaussianNB BernoulliNB (高斯樸素貝葉斯和伯努利樸素貝葉斯) 分類模型 models.append(("GaussianNB",GaussianNB())) models.append(("BernoulliNB",BernoulliNB())) # 添加決策樹分類模型 決定順序的算法(1)Gini系數(shù) CART算法,(2)信息增益 ID3算法 models.append(("DecisionTree_Gini",DecisionTreeClassifier(criterion="gini"))) models.append(("DecisionTree_entropy",DecisionTreeClassifier(criterion = "entropy",min_impurity_split = 0))) # 添加支持向量機分類模型 SVC models.append(("SVM Classifier",SVC(C = 10**3))) # 添加集成分類算法中的隨機森林算法RandomForest models.append(("RandomForest",RandomForestClassifier(n_estimators = 100))) # 添加集成分類算法中的AdaBoostClassifier models.append(('AdaBoost',AdaBoostClassifier(n_estimators = 1000)))for clf_name,clf in models:clf.fit(X_train,Y_train)XY_list = [(X_train,Y_train,"訓練集"),(X_validation,Y_validation,"驗證集"),(X_test,Y_test,"測試集")]print("*"*15,clf_name,"*"*15)for x,y,data_type in XY_list:y_predict = clf.predict(x)print(data_type+":")print("\t","ACC:",accuracy_score(y,y_predict))print("\t","PRC:",precision_score(y,y_predict))print("\t","REC:",recall_score(y,y_predict))print("\t","f1 :",f1_score(y,y_predict))# 決策樹可視化import repattern = re.compile("_")clf_name_new = pattern.split(clf_name)[0]if clf_name_new == "DecisionTree":import pydotplusfrom sklearn.tree import export_graphvizimport os os.environ["PATH"] += os.pathsep + "D://bin/"dot_data = export_graphviz(clf,out_file = None,feature_names = feature_names,class_names = ["not left","left"],\filled = True,rounded = True,special_characters = True)graph = pydotplus.graph_from_dot_data(dot_data)graph.write_pdf("./"+clf_name+".pdf")# 模型保存joblib.dump(clf,clf_name)by CyrusMay 2022 04 05
總結(jié)
以上是生活随笔為你收集整理的数据挖掘 —— 有监督学习(分类)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据挖掘 —— 探索性数据分析
- 下一篇: 数据挖掘 —— 有监督学习(回归)