一般應(yīng)用分類分析用于提煉應(yīng)用規(guī)則分類用于提取特征分類用于處理缺失值分類分析算法的選取數(shù)據(jù)準(zhǔn)備
本次分類分析使用股市數(shù)據(jù) 。此處可參考金融數(shù)據(jù)準(zhǔn)備 。
KNN
K-(KNN) 是一種懶惰學(xué)習(xí)算法和分類算法 。此外,KNN是機(jī)器學(xué)習(xí)中最簡(jiǎn)單的方法 。利用KNN進(jìn)行分類,預(yù)測(cè)新點(diǎn)的分類 。
數(shù)據(jù)預(yù)處理
從數(shù)據(jù)集中選取需要用的數(shù)據(jù)作為輸入數(shù)據(jù)和標(biāo)簽 。
X = dataset.loc[ : , ['high','low','close']].valuesy = dataset.loc[ : , ['Up_Down']].valuesfrom sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20)
數(shù)據(jù)標(biāo)準(zhǔn)化
數(shù)據(jù)標(biāo)準(zhǔn)化對(duì)于距離類模型 , 數(shù)據(jù)歸一化是非常有必要的 。這里使用.中 。
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()scaler.fit(X_train)X_train = scaler.transform(X_train)X_test = scaler.transform(X_test)
模型訓(xùn)練與預(yù)測(cè)
from sklearn.neighbors import KNeighborsClassifierknn = KNeighborsClassifier(n_neighbors=5)knn.fit(X_train, y_train) y_pred = knn.predict(X_test)
模型評(píng)價(jià)
from sklearn.metrics import classification_report, confusion_matrixprint(confusion_matrix(y_test, y_pred))print(classification_report(y_test, y_pred))
[[39 31] [32 44]]precisionrecallf1-scoresupport-10.550.560.557010.590.580.5876accuracy0.57146macro avg0.570.570.57146weighted avg0.570.570.57146
繪制學(xué)習(xí)曲線
分類以個(gè)數(shù)為x軸,模型得分為y軸,繪制學(xué)習(xí)曲線,以模型得分最高的為本次模型最終參數(shù) 。
from sklearn.metrics import accuracy_scorescore = []for K in range(40):K_value = https://www.jianzixun.com/K+1knn = KNeighborsClassifier(n_neighbors = K_value, weights='uniform', algorithm='auto')knn.fit(X_train, y_train)y_pred = knn.predict(X_test)score.append(round(accuracy_score(y_test,y_pred)*100,2))plt.figure(figsize=(12, 6))plt.plot(range(1, 41), score, color='red', linestyle='dashed', marker='o',markerfacecolor='blue', markersize=10)plt.title('The Learning curve')plt.xlabel('K Value')plt.ylabel('Score')
帶誤差線的學(xué)習(xí)曲線
from sklearn import metricsKs = 10mean_acc = np.zeros((Ks-1))std_acc = np.zeros((Ks-1))ConfustionMx = [];for n in range(1,Ks):# 模型訓(xùn)練和預(yù)測(cè)neigh = KNeighborsClassifier(n_neighbors = n).fit(X_train,y_train)yhat=neigh.predict(X_test)mean_acc[n-1] = metrics.accuracy_score(y_test, yhat)std_acc[n-1]=np.std(yhat==y_test)/np.sqrt(yhat.shape[0])# 繪圖plt.figure(figsize=(12,6))plt.plot(range(1,Ks),mean_acc,'g')plt.fill_between(range(1,Ks),mean_acc - 1 * std_acc,mean_acc + 1 * std_acc, alpha=0.10)plt.legend(('Accuracy ', '+/- 3xstd'))plt.ylabel('Accuracy ')plt.xlabel('Number of Nabors (K)')plt.tight_layout()plt.show()# print( "The best accuracy was with",mean_acc.max(), "with k=",mean_acc.argmax()+1)
誤差率可視化
error = []# 計(jì)算K值在1-40之間多誤差值for i in range(1, 40):knn = KNeighborsClassifier(n_neighbors=i)knn.fit(X_train, y_train)pred_i = knn.predict(X_test)error.append(np.mean(pred_i != y_test))plt.figure(figsize=(12, 6))plt.plot(range(1, 40), error, color='red', linestyle='dashed', marker='o',markerfacecolor='blue', markersize=10)plt.title('Error Rate K Value')plt.xlabel('K Value')plt.ylabel('Mean Error')
邏輯回歸
邏輯回歸是線性分類起,其本質(zhì)是由線性回歸通過(guò)一定的數(shù)學(xué)變化而來(lái)的 。要理解邏輯回歸 , 得先理解線性回歸 。線性回歸是構(gòu)造一個(gè)預(yù)測(cè)函數(shù)來(lái)映射輸入的特性矩陣和標(biāo)簽的線性關(guān)系 。線性回歸使用最佳的擬合直線(也就是回歸線)在因變量()和一個(gè)或多個(gè)自變量()之間建立一種關(guān)系 。在這種技術(shù)中,因變量是連續(xù)的,自變量可以是連續(xù)的也可以是離散的,回歸線的性質(zhì)是線性的 。
類比線性方程 :
可以用矩陣的形式表示該方程,其中 x 與 w 均可以被看作一個(gè)列矩陣:
通過(guò)函數(shù) ,線性回歸使用輸入的特征矩陣 來(lái)輸出一組連續(xù)型的標(biāo)簽值,以完成各種預(yù)測(cè)連續(xù)型變量的任務(wù) 。若標(biāo)簽是離散型變量,尤其是滿足0-1分布的離散型變量 , 則可以通過(guò)引入聯(lián)系函數(shù)(link ),將線性回歸方程 變換為 ,并且令 的值分布在 (0,1) 之間 , 且當(dāng) 接近0時(shí)樣本的標(biāo)簽為類別0 , 當(dāng) 接近1時(shí)樣本的標(biāo)簽為類別1,這樣就得到了一個(gè)分類模型 。而這個(gè)聯(lián)系函數(shù)對(duì)于邏輯回歸來(lái)說(shuō),就是函數(shù)
線性回歸中 帶入到函數(shù)中,即得到二元邏輯回歸模型的一半形式:
其中 為邏輯回歸的返回的標(biāo)簽值 。假設(shè)已經(jīng)訓(xùn)練好一組權(quán)值向量。只要把我們需要預(yù)測(cè)的特征矩陣 帶入到 方差中,得到輸出值就是標(biāo)簽為類別1的概率,于是就能判斷輸入特征矩陣是屬于哪個(gè)類別 。
因此邏輯回歸是不直接預(yù)測(cè)標(biāo)簽值,而是去預(yù)測(cè)標(biāo)簽為類別1的概率 。一般地如果標(biāo)簽為類別1的概率大于0.5,就認(rèn)為其為類別1,否在為類別2 。
數(shù)據(jù)準(zhǔn)備
定義x、y,數(shù)據(jù)標(biāo)準(zhǔn)化、劃分訓(xùn)練集和測(cè)試集 。
dataset['Buy_Sell'] = dataset['Buy_Sell'].astype('int')X = np.asarray(dataset[['open', 'high', 'low', 'close', 'volume']])y = np.asarray(dataset['Buy_Sell'])from sklearn import preprocessingX = preprocessing.StandardScaler().fit(X).transform(X)from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
模型實(shí)例化
# 模型訓(xùn)練from sklearn.linear_model import LogisticRegressionfrom sklearn.metrics import confusion_matrixLR = LogisticRegression(C=0.01, solver='liblinear').fit(X_train,y_train)yhat = LR.predict(X_test)# predict_proba是所有類的估計(jì)值的返回,按類的標(biāo)簽排序 。# 第1列是第1類P(Y=1|X)的概率,第二列是第0類P(Y=0|X)的概率yhat_prob = LR.predict_proba(X_test)
模型評(píng)價(jià)
雅卡爾指數(shù)( index),又稱為雅卡爾相似系數(shù)() , 是用于比較樣本集的相似性與多樣性的統(tǒng)計(jì)量 。雅卡爾系數(shù)能夠量度有限樣本集合的相似度,其定義為兩個(gè)集合交集大小與并集大小之間的比例:
from sklearn.metrics import jaccard_scorejaccard_score(y_test, yhat)
混淆矩陣
from sklearn.metrics import classification_report, confusion_matriximport itertoolsdef plot_confusion_matrix(cm, classes,normalize=False,title='Confusion matrix',cmap=plt.cm.Blues):"""This function prints and plots the confusion matrix.Normalization can be applied by setting `normalize=True`."""if normalize:cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]print("Normalized confusion matrix")else:print('Confusion matrix, without normalization')print(cm)plt.imshow(cm, interpolation='nearest', cmap=cmap)plt.title(title)plt.colorbar()tick_marks = np.arange(len(classes))plt.xticks(tick_marks, classes, rotation=45)plt.yticks(tick_marks, classes)fmt = '.2f' if normalize else 'd'thresh = cm.max() / 2.for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):plt.text(j, i, format(cm[i, j], fmt),horizontalalignment="center",color="white" if cm[i, j] > thresh else "black")plt.tight_layout()plt.ylabel('True label')plt.xlabel('Predicted label')
計(jì)算混淆矩陣并繪制非標(biāo)準(zhǔn)化混淆矩陣
cnf_matrix = confusion_matrix(y_test, yhat, labels=[1,0])np.set_printoptions(precision=2)plt.figure(figsize=(12,6))plot_confusion_matrix(cnf_matrix,classes=['Buy_Sell=1','Buy_Sell=0'],normalize= False,title='Confusion matrix')
Confusion matrix, without normalization[[39 53] [38 53]]
分類模型評(píng)價(jià)報(bào)告
print (classification_report(y_test, yhat))
precisionrecallf1-scoresupport00.500.580.549110.510.420.4692accuracy0.50183macro avg0.500.500.50183weighted avg0.500.500.50183
對(duì)數(shù)損失
對(duì)數(shù)損失(對(duì)數(shù)損失)度量預(yù)測(cè)輸出為0到1之間的概率值的分類器的性能 。
from sklearn.metrics import log_losslog_loss(y_test, yhat_prob)>>> 0.690790520605071LR2 = LogisticRegression(C=0.01, solver='sag').fit(X_train,y_train)yhat_prob2 = LR2.predict_proba(X_test)print ("LogLoss: : %.2f" % log_loss(y_test, yhat_prob2))LogLoss: : 0.69
ROC
(ROC) 曲線顯示了一種檢測(cè)或一種檢測(cè)組合的每一個(gè)可能截止點(diǎn)的敏感性和特異性之間的聯(lián)系/權(quán)衡 。此外 , 該曲線是比較兩個(gè)工作特征真陽(yáng)性率(TPR)和假陽(yáng)性率(FPR) 。曲線下面積(Area Under Curve, AUC)是代表二值分類的ROC曲線下的面積 。
y_pred_proba = LR.predict_proba(X_test)[::,1]fpr, tpr, _ = metrics.roc_curve(y_test,y_pred_proba)auc = metrics.roc_auc_score(y_test, y_pred_proba)plt.figure(figsize=(12,6))plt.plot(fpr,tpr,label="data 1, auc="+str(auc))plt.legend(loc=4)plt.show()
樸素貝葉斯分類器
樸素貝葉斯分類器是一種基于概率統(tǒng)計(jì)的分類方法,在條件獨(dú)立假設(shè)的基礎(chǔ)上使用貝葉斯定理構(gòu)建算法,能夠通過(guò)提供后驗(yàn)概率估計(jì)來(lái)量化預(yù)測(cè)中的不確定性的概率分布模型 。
一些特點(diǎn)貝葉斯定理
貝葉斯定理給出了條件概率 與 之間的關(guān)系 。
樸素貝葉斯假設(shè)所有屬性 的類條件概率可以被分解為類條件概率的乘積:(給定類別標(biāo)簽 , 屬性 是相互獨(dú)立的)

文章插圖

文章插圖
由于對(duì)于每個(gè)都是一樣的,所以樸素貝葉斯方程:
在小數(shù)據(jù)集上仍然可以使用先驗(yàn)概率作為后驗(yàn)概率的估計(jì),通過(guò)不斷增加更多的屬性在模型中引入解釋變量,可以不斷細(xì)化后驗(yàn)概率 。
求解步驟算法實(shí)現(xiàn)
X = dataset[['open', 'high', 'low', 'volume', 'close','Returns']].valuesy = dataset['Buy_Sell'].valuesfrom sklearn.model_selection import StratifiedShuffleSplitfrom sklearn.naive_bayes import GaussianNBfrom sklearn.metrics import confusion_matrixmodel = GaussianNB()sss = StratifiedShuffleSplit(n_splits=5, test_size=0.50, random_state=None)sss.get_n_splits(X, y)cm_sum = np.zeros((2,2))for train_index, test_index in sss.split(X, y):X_train, X_test = X[train_index], X[test_index]y_train, y_test = y[train_index], y[test_index]model.fit(X_train, y_train)y_pred = model.predict(X_test)cm = confusion_matrix(y_test, y_pred)cm_sum = cm_sum + cmprint('nNaive Bayes Gaussian Algorithms')print('nConfusion Matrix')print('_'*20)print('Predicted')print('pos neg')print('pos: %i %i' % (cm_sum[1,1], cm_sum[0,1]))print('neg: %i %i' % (cm_sum[1,1], cm_sum[0,1]))Naive Bayes Gaussian AlgorithmsConfusion Matrix____________________Predictedpos negpos: 483 467neg: 483 467校準(zhǔn)的預(yù)測(cè)概率
from sklearn.naive_bayes import GaussianNBfrom sklearn.calibration import CalibratedClassifierCVX = dataset.drop(['Buy_Sell'], axis=1).valuesY = dataset['Buy_Sell'].values# 創(chuàng)建高斯樸素貝葉斯實(shí)例clf = GaussianNB()# 使用sigmoid校準(zhǔn)創(chuàng)建校準(zhǔn)交叉驗(yàn)證clf_sigmoid = CalibratedClassifierCV(clf, cv=2, method='sigmoid')# 校準(zhǔn)的概率clf_sigmoid.fit(X, Y)"""CalibratedClassifierCV(base_estimator=GaussianNB(priors=None, var_smoothing=1e-09),cv=2, method='sigmoid')"""# 創(chuàng)建新觀察數(shù)據(jù)new_observation = [[.4, .4, .4, .4, .4, .4, .4, .4, .4]]clf_sigmoid.predict_proba(new_observation)array([[0.50353248, 0.49646752]])clf_sigmoid.score(X,Y)0.49743589743589745決策樹(shù)分類器
決策樹(shù)是一種樹(shù)狀結(jié)構(gòu),她的每一個(gè)葉子結(jié)點(diǎn)對(duì)應(yīng)著一個(gè)分類,非葉子結(jié)點(diǎn)對(duì)應(yīng)著在某個(gè)屬性上的劃分,根據(jù)樣本在該屬性上的不同取值降氣劃分成若干個(gè)子集 。
基本原理
數(shù)模型通過(guò)遞歸切割的方法來(lái)尋找最佳分類標(biāo)準(zhǔn),進(jìn)而最終形成規(guī)則 。分類樹(shù)用基尼系數(shù)最小化準(zhǔn)則,進(jìn)行特征選擇 , 生成二叉樹(shù) 。
決策樹(shù)的學(xué)習(xí)算法包含特征選擇、決策樹(shù)的生成、決策樹(shù)的剪枝過(guò)程 。
特征選擇
選擇對(duì)訓(xùn)練數(shù)據(jù)具有分類能力的特征,特征選擇的準(zhǔn)則是信息增益、或信息增益比 , 特征選擇是決定用哪個(gè)特征來(lái)劃分特征空間 。
分類決策樹(shù)的生成
通過(guò)計(jì)算信息增益、信息增益比、基尼系數(shù)作為特征選擇準(zhǔn)則,從根節(jié)點(diǎn)開(kāi)始 , 遞歸地產(chǎn)生決策樹(shù) 。這相當(dāng)于利用不純度不斷選取局部最優(yōu)特征,或?qū)⒂?xùn)練集分割為能夠基本分類正確的子集 。
CATA分類樹(shù)的生成
用基尼系數(shù)選擇最優(yōu)特征 , 同時(shí)決定該特征的最優(yōu)二值切分點(diǎn) 。計(jì)算每個(gè)特征對(duì)數(shù)據(jù)集的基尼指數(shù) 。對(duì)于每個(gè)特征 , 對(duì)其可能取的每個(gè)值,將數(shù)據(jù)集切分成兩部分,并計(jì)算基尼指數(shù) 。選擇基尼系數(shù)最小的特征以及其切分點(diǎn)作為最優(yōu)特征和最優(yōu)切分點(diǎn) 。不斷循環(huán)直至滿足條件停止 。
決策樹(shù)的剪枝
通過(guò)極小化決策樹(shù)整體的損失函數(shù)或代價(jià)函數(shù)來(lái)實(shí)現(xiàn) 。用的是正則化極大似然估計(jì)進(jìn)行模型選擇 。損失函數(shù)定義為模型擬合程度和模型復(fù)雜度求和 ——
剪枝策略:預(yù)剪枝、后剪枝
預(yù)剪枝
定義:決策樹(shù)生成過(guò)程中,對(duì)每個(gè)結(jié)點(diǎn)在劃分前先進(jìn)行估計(jì)在模型中引入解釋變量 , 若當(dāng)前結(jié)點(diǎn)的劃分不能帶來(lái)決策樹(shù)泛化能力的提升 , 則停止劃分并將該結(jié)點(diǎn)標(biāo)記為葉子結(jié)點(diǎn) 。
優(yōu)缺點(diǎn):降低過(guò)擬合風(fēng)險(xiǎn),減少訓(xùn)練和測(cè)試時(shí)間開(kāi)銷 。但”貪心”本質(zhì)帶來(lái)欠擬合風(fēng)險(xiǎn) 。
后剪枝
定義:先從訓(xùn)練集生產(chǎn)一顆完整的決策樹(shù),自底向上地對(duì)非葉子結(jié)點(diǎn)進(jìn)行考察,若該結(jié)點(diǎn)對(duì)應(yīng)的子樹(shù)替換為葉子結(jié)點(diǎn)能夠帶來(lái)決策樹(shù)泛化能力的提升,則將該子樹(shù)替換為葉結(jié)點(diǎn) 。
優(yōu)缺點(diǎn):欠擬合風(fēng)險(xiǎn)小 , 泛化能力優(yōu)于預(yù)剪枝 。但訓(xùn)練時(shí)間比未剪枝和預(yù)剪枝的時(shí)間開(kāi)銷大得多 。
CATA樹(shù)的剪枝
第一步:從生成的決策樹(shù) 底部進(jìn)行剪枝,直到根節(jié)點(diǎn),形成一個(gè)子樹(shù)序列。
第二步:利用交叉驗(yàn)證在驗(yàn)證集上對(duì)子樹(shù)序列進(jìn)行測(cè)試 , 選擇最優(yōu)子樹(shù) 。
決策樹(shù)算法算法描述ID3算法其核心是在決策樹(shù)的各級(jí)節(jié)點(diǎn)上,使用信息增益方法的選擇標(biāo)準(zhǔn),來(lái)幫助確定生產(chǎn)每個(gè)節(jié)點(diǎn)時(shí)所對(duì)應(yīng)采用的合適屬性,不能自動(dòng)分箱,不能剪枝C4.5算法相對(duì)于ID3改進(jìn)是使用信息增益率來(lái)選擇節(jié)點(diǎn)屬性 。
克服ID3點(diǎn)不足: ID3只適用于離散的描述屬性,C4.5可以處理連續(xù)和離散屬性;可以剪枝CART算法通過(guò)構(gòu)建樹(shù)、修剪樹(shù)、評(píng)估樹(shù)來(lái)構(gòu)建一個(gè)二叉樹(shù) 。
通過(guò)控制樹(shù)的結(jié)構(gòu)來(lái)控制模型
當(dāng)終節(jié)點(diǎn)是連續(xù)變量是——回歸樹(shù)
當(dāng)終節(jié)點(diǎn)是分類變量是——分類樹(shù)
算法實(shí)現(xiàn)
中的決策樹(shù)實(shí)例
from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20)from sklearn.tree import DecisionTreeClassifierclassifier = DecisionTreeClassifier()classifier.fit(X_train, y_train)y_pred = classifier.predict(X_test)from sklearn.metrics import classification_report, confusion_matrixprint(confusion_matrix(y_test, y_pred))print(classification_report(y_test, y_pred))[[686] [10 62]]precisionrecallf1-scoresupportDown0.870.920.8974Up0.910.860.8972accuracy0.89146macro avg0.890.890.89146weighted avg0.890.890.89146模型評(píng)價(jià)混淆矩陣
import matplotlib.pyplot as pltimport seaborn as snsfrom sklearn import metricscm_matrix = metrics.confusion_matrix(y_test, y_pred)cm_matrixclass_names=[0,1] # nameof classesfig, ax = plt.subplots()tick_marks = np.arange(len(class_names))plt.xticks(tick_marks, class_names)plt.yticks(tick_marks, class_names)# create heatmapsns.heatmap(pd.DataFrame(cm_matrix), annot=True, cmap="YlGnBu" ,fmt='g')ax.xaxis.set_label_position("top")plt.tight_layout()plt.title('Confusion matrix', y=1.1)plt.ylabel('Actual label')plt.xlabel('Predicted label')plt.show()print("Accuracy:",metrics.accuracy_score(y_test, y_pred))Accuracy: 0.8904109589041096決策樹(shù)用于特征創(chuàng)造
將每日來(lái)盤價(jià)、收盤價(jià)、交易量等進(jìn)行環(huán)比,得到每天是增是減的分類型變量 。
# 創(chuàng)造更多的時(shí)間dataset['Open_N'] = np.where(dataset['open'].shift(-1) > dataset['open'],'Up','Down')dataset['High_N'] = np.where(dataset['high'].shift(-1) > dataset['high'],'Up','Down')dataset['Low_N'] = np.where(dataset['low'].shift(-1) > dataset['low'],'Up','Down')dataset['Close_N'] = np.where(dataset['close'].shift(-1) > dataset['close'],'Up','Down')dataset['Volume_N'] = np.where(dataset['volume'].shift(-1) > dataset['volume'],'Positive','Negative')dataset.head()數(shù)據(jù)預(yù)處理
X = dataset[['Open', 'Open_N', 'Volume_N']].valuesy = dataset['Up_Down']from sklearn import preprocessingle_Open = preprocessing.LabelEncoder()le_Open.fit(['Up','Down'])X[:,1] = le_Open.transform(X[:,1]) le_Volume = preprocessing.LabelEncoder()le_Volume.fit(['Positive', 'Negative'])X[:,2] = le_Volume.transform(X[:,2]) from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20)模型建立與預(yù)測(cè)
from sklearn.tree import DecisionTreeClassifierclassifier = DecisionTreeClassifier()classifier.fit(X_train, y_train)# 實(shí)例化模型Up_Down_Tree = DecisionTreeClassifier(criterion="entropy", max_depth = 4)Up_Down_TreeUp_Down_Tree.fit(X_train,y_train)# 預(yù)測(cè)predTree = Up_Down_Tree.predict(X_test)print(predTree[0:5])print(y_test[0:5])['Up' 'Up' 'Up' 'Up' 'Down']date2019-12-31Up2019-12-25Up2018-01-11Up2020-08-21Down2019-11-20DownName: Up_Down, dtype: object決策樹(shù)可視化
【原理+代碼 基于Python實(shí)現(xiàn)五大常用分類算法】
from sklearn.tree import DecisionTreeClassifierfrom IPython.display import Imagefrom sklearn import tree# pip install pydotplusimport pydotplus# 創(chuàng)建決策樹(shù)實(shí)例clf = DecisionTreeClassifier(random_state=0)X = dataset.['open', 'high', 'low', 'volume', 'Open_Close', 'High_Low','Increase_Decrease', 'Buy_Sell_on_Open', 'Returns']y = dataset['Buy_Sell'] # 訓(xùn)練模型model = clf.fit(X, y)# 創(chuàng)建 DOT datadot_data = https://www.jianzixun.com/tree.export_graphviz(clf, out_file=None,feature_names=X.columns,class_names=X.columns)# 繪圖graph = pydotplus.graph_from_dot_data(dot_data)# 展現(xiàn)圖形Image(graph.create_png())決策樹(shù)可視化2
這里展示了整個(gè)決策樹(shù)決策過(guò)程,這里看似很不清晰 , 但放大后 , 能看清每個(gè)小框框的內(nèi)容:分類規(guī)則、基尼指數(shù)、樣本數(shù)、類別標(biāo)簽等等詳細(xì)內(nèi)容 。
支持向量機(jī)分類器
支持向量機(jī)(, SVM)是一種二分類模型,它的基本模型是定義在特征空間上的間隔最大的線性分類器,間隔最大使它有別于感知機(jī);
SVM的的學(xué)習(xí)策略就是間隔最大化,可形式化為一個(gè)求解凸二次規(guī)劃的問(wèn)題,也等價(jià)于正則化的合頁(yè)損失函數(shù)的最小化問(wèn)題 。SVM的的學(xué)習(xí)算法就是求解凸二次規(guī)劃的最優(yōu)化算法 。
SVM還包括核技巧,這使它成為實(shí)質(zhì)上的非線性分類器 。
中實(shí)現(xiàn)SVM也是比較方便 。
from sklearn.svm import SVC # "Support Vector Classifier"from sklearn.metrics import accuracy_scorefrom sklearn.metrics import classification_reportmodel = SVC(kernel = 'rbf', C = 1000,gamma=0.001)model.fit(X_train, y_train)svc_predictions = model.predict(X_test)print("Accuracy of SVM using optimized parameters ", accuracy_score(y_test,svc_predictions)*100)print("Report : ", classification_report(y_test,svc_predictions))print("Score : ",model.score(X_test, y_test))更多分類模型效果評(píng)價(jià)可參見(jiàn)該文中的評(píng)價(jià)指標(biāo) 。
本文到此結(jié)束,希望對(duì)大家有所幫助 。
- 基于Apache Flink實(shí)時(shí)計(jì)算數(shù)據(jù)流業(yè)務(wù)引擎在京東零售的實(shí)踐和落地
- UnitMesh 架構(gòu):釋放 AI 編程的全部潛力,程序員將成為代碼質(zhì)檢員?
- 軟件測(cè)試丨只懂黑盒測(cè)試也能學(xué)會(huì)的代碼覆蓋率及精準(zhǔn)化測(cè)試
- 1分鐘合并100份Word文件居然這么簡(jiǎn)單?不用代碼或插件,只需兩步
- 紋眉的技術(shù)原理介紹 ?紋眉幾天可以恢復(fù)自然
- 熟雞蛋與銀器放在一起擦身為什么銀器會(huì)變成黑色藍(lán)色紅色的變藍(lán)變紅的原理是什么
- windows7電腦藍(lán)屏死機(jī)故障提示代碼74解決方法
- 牛享精選要下快下, Web惡意程序源代碼合集
- 寫(xiě)CSS代碼時(shí),先理清偽類和偽元素的用法區(qū)別,能讓代碼精簡(jiǎn)不少
- 【知行曉莊】基于“人際交往”主題的小學(xué)心理課堂教學(xué)策略探析——記第16周棲霞區(qū)小
