一.集成學習簡介
簡介:構建并結合多個學習器來完成任務
圖解:
按照個體學習器劃分分類:
(1)同質集成:只包含同種類型算法,比如決策樹集成全是決策樹
(2)異質集成:包含不同種類型算法,比如同時包含神經網絡和決策樹
按照運行方式分類:
(1)并行運行:bagging
(2)串行運行:boosting
二.Bagging
簡介:并行式集成學習方法
采樣方法:自助采樣法。假設采集m個樣本,我們先采集一個樣本然后將其放回初始樣本,下次有可能再次采集到,如此重復采集m次即可
思想:并聯形式,可以快速得到各個基礎模型,它們之間互不干擾,并且使用相同參數,只是輸入不同。對于回歸算法求平均,對于分類算法進行投票法
代表性算法:隨機森林
偏差-方差角度:由于是基于泛化性能比較強的學習器來構建很強的集成,降低方差
圖解:
三.Boosting
簡介:串行式集成學習方法
思想:對于訓練集中的每個樣本建立權值wi,對于分類錯誤樣本會在下一輪的分類中獲得更大的權重,也就是說每次新的計算結果都要利用上次返回的結果,如此迭代循環往復
代表性算法:AdaBoost和GBDT
偏差-方差角度:由于是基于泛化性能比較弱的學習器來構建很強的集成,降低偏差
圖解:
四.Bagging與Boosting區別
1.樣本選擇
Bagging采取Bootstraping的是隨機有放回的取樣
Boosting的每一輪訓練的樣本是固定的,改變的是每個樣本的權重
2.樣本權重
Bagging采取的是均勻取樣,且每個樣本的權重相同
Boosting根據錯誤率調整樣本權重,錯誤率越大的樣本權重會變大
3.預測函數
Bagging預測函數權值相同
Boosting中誤差越小的預測函數其權值越大
4.并行計算
Bagging 的各個預測函數可以并行生成
Boosting的各個預測函數必須按照順序迭代生成
五.預測居民收入
項目背景:該數據從美國1994年人口普查數據庫抽取而來,可以用來預測居民收入是否超過50K/year。該數據集類變量為年收入是否超過,屬性變量包含年齡,工種,學歷,職業,人種等重要信息,14個屬性變量中有7個類別型變量
import pandas as pd
import numpy as np
import seaborn as sns
%matplotlib inline
#讀取文件
data_train=pd.read_csv('./income_census_train.csv')
#查看數據
data_train.head()
#數據查看與處理
#數值型特征的描述與相關總結
data_train.describe()
#非數值型
data_train.describe(include=['O'])
#刪除序列數據
data = data_train.drop(['ID'],axis = 1)
#查看數據
data.head()
#數據轉換
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
# 將oject數據類型進行類別編碼
for feature in data.columns:
if data[feature].dtype == 'object':
data[feature] = pd.Categorical(data[feature]).codes
#標準化處理
X = np.array(X_df)
y = np.array(y_df)
scaler = StandardScaler()
X = scaler.fit_transform(X)
fromsklearn.treeimportDecisionTreeClassifier
from pyecharts.charts import Scatter
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.charts import Page
#初始化
tree = DecisionTreeClassifier(random_state=0)
tree.fit(X, y)
#顯示每個屬性的相對重要性得分
relval = tree.feature_importances_
#構建數據
importances_df = pd.DataFrame({
'feature' : data.columns[:-1],
'importance' : relval
})
importances_df.sort_values(by = 'importance', ascending = False, inplace = True)
#作圖
bar = Bar()
bar.add_xaxis(importances_df.feature.tolist())
bar.add_yaxis(
'importance',
importances_df.importance.tolist(),
label_opts = opts.LabelOpts(is_show = False))
bar.set_global_opts(
title_opts = opts.TitleOpts(title = '糖尿病數據各特征重要程度'),
xaxis_opts = opts.AxisOpts(axislabel_opts = opts.LabelOpts(rotate = 30)),
datazoom_opts = [opts.DataZoomOpts()]
)
bar.render('diabetes_importances_bar.html')
bar.render_notebook()
#特征篩選
from sklearn.feature_selection import RFE
# 使用決策樹作為模型
lr = DecisionTreeClassifier()
names = X_df.columns.tolist()
#將所有特征排序,篩選前10個重要性較高特征
selector = RFE(lr, n_features_to_select = 10)
selector.fit(X,y.ravel())
#得到新的dataframe
X_df_new = X_df.iloc[:, selector.get_support(indices = False)]
X_df_new.columns
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score,confusion_matrix
#標準化
X_new = scaler.fit_transform(np.array(X_df_new))
#分離數據
X_train, X_test, y_train, y_test = train_test_split(X_new,y,test_size = 0.3,random_state=0)
#隨機森林分類
model_rf=RandomForestClassifier()
model_rf.fit(X_train,y_train)
#預測
model_rf.predict(X_test)
#輸出準確率
print(round(accuracy_score(y_test,model_rf.predict(X_test)),2))
#總體來說不是很高,后期我們還需要再次提升
import itertools
#繪制混淆矩陣
def plot_confusion_matrix(cm, classes, title='Confusion matrix', cmap=plt.cm.Blues):
plt.imshow(cm, interpolation='nearest', cmap=cmap)
plt.title(title)
plt.colorbar()
tick_marks = np.arange(len(classes))
plt.xticks(tick_marks, classes, rotation=0)
plt.yticks(tick_marks, classes)
#設置thresh值
thresh = cm.max() / 2.
for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
plt.text(j, i, cm[i, j],
horizontalalignment="center",
color="white" if cm[i, j] > thresh else "black")
#設置布局
plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted label')
#參考鏈接:https://www.heywhale.com/mw/project/5bfb6342954d6e0010675425/content
#計算矩陣
#計算矩陣
cm = confusion_matrix(y_test,model_rf.predict(X_test))
class_names = [0,1]
#繪制圖形
plt.figure()
#輸出混淆矩陣
plot_confusion_matrix(cm , classes=class_names, title='Confusion matrix')
#顯示圖形
plt.show()
#輸出預測信息,感興趣讀者可以手動驗證一下
print(classification_report(y_test, model_rf.predict(X_test)))
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
集成
+關注
關注
1文章
176瀏覽量
30231 -
算法
+關注
關注
23文章
4607瀏覽量
92840 -
決策樹
+關注
關注
3文章
96瀏覽量
13548
發布評論請先 登錄
相關推薦
基于Qualcomm DSP的算法集成案例
一.簡介上篇博主已經給大家分享了Qualcomm 平臺DSP算法集成的架構和算法原理及其實現的功能,今天我們進一步分享Qualcomm 通用平臺系列的算法
發表于 09-25 15:41
基于Qualcomm DSP的算法集成系列
視覺、視頻、圖像和Camera。Sensor DSP:也叫做SLPI,所有的sensor都鏈接到SLPI上面,它管理所有的Sensor及相關算法。二.DSP算法集成1.
發表于 09-25 15:44
AI應用于醫療預測 需集成機器學習與行為算法
結合機器學習和行為算法的人工智能(AI)虛擬助理軟件愈來愈普遍,隨著資料庫不斷擴展,可以對人類偏好做出愈來愈準確的預測,但當下流行的健康追蹤裝置欲實現醫療預測,也必須集成機器學習與行為
發表于 01-17 10:58
?882次閱讀
基于改進CNN網絡與集成學習的人臉識別算法
針對復雜卷積神經網絡(CNN)在中小型人臉數據庫中的識別結果容易出現過擬合現象,提出一種基于改進CNN網絡與集成學習的人臉識別算法。改進CNN網絡結合平面網絡和殘差網絡的特點,采用平均池化層代替全
發表于 05-27 14:36
?6次下載
深度學習算法簡介 深度學習算法是什么 深度學習算法有哪些
深度學習算法簡介 深度學習算法是什么?深度學習算法有哪些?? 作為一種現代化、前沿化的技術,深度
深度學習算法庫框架學習
深度學習算法庫框架的相關知識點以及它們之間的比較。 1. Tensorflow Tensorflow是Google家的深度學習框架,已經成為深度學習
機器學習算法總結 機器學習算法是什么 機器學習算法優缺點
對數據的學習和分析,機器學習能夠自動發現數據中的規律和模式,進而預測未來的趨勢。 機器學習算法優缺點 機器學習
機器學習vsm算法
(VSM)算法計算相似性。本文將從以下幾個方面介紹機器學習vsm算法。 1、向量空間模型 向量空間模型是一種常見的文本表示方法,根據文本的詞頻向量將文本映射到一個高維向量空間中。這種方
機器學習有哪些算法?機器學習分類算法有哪些?機器學習預判有哪些算法?
許多不同的類型和應用。根據機器學習的任務類型,可以將其分為幾種不同的算法類型。本文將介紹機器學習的算法類型以及分類算法和預測
深度學習算法在集成電路測試中的應用
隨著半導體技術的快速發展,集成電路(IC)的復雜性和集成度不斷提高,對測試技術的要求也日益增加。深度學習算法作為一種強大的數據處理和模式識別工具,在
評論