Scikit Learn - วิธีการส่งเสริม
ในบทนี้เราจะเรียนรู้เกี่ยวกับวิธีการเพิ่มประสิทธิภาพใน Sklearn ซึ่งทำให้สามารถสร้างโมเดลทั้งชุดได้
วิธีการส่งเสริมสร้างแบบจำลองทั้งมวลด้วยวิธีที่เพิ่มขึ้น หลักการสำคัญคือการสร้างแบบจำลองขึ้นทีละน้อยโดยฝึกตัวประมาณค่าแบบจำลองพื้นฐานแต่ละตัวตามลำดับ ในการสร้างชุดที่ทรงพลังโดยพื้นฐานแล้ววิธีการเหล่านี้จะรวมผู้เรียนหลายสัปดาห์ซึ่งได้รับการฝึกฝนตามลำดับผ่านข้อมูลการฝึกอบรมหลาย ๆ ครั้ง โมดูล sklearn.ensemble มีสองวิธีการส่งเสริมดังต่อไปนี้
AdaBoost
เป็นหนึ่งในวิธีการเพิ่มประสิทธิภาพที่ประสบความสำเร็จมากที่สุดซึ่งมีคีย์หลักในการให้น้ำหนักกับอินสแตนซ์ในชุดข้อมูล นั่นเป็นเหตุผลที่อัลกอริทึมต้องใส่ใจกับอินสแตนซ์น้อยลงในขณะที่สร้างโมเดลที่ตามมา
การจัดประเภทด้วย AdaBoost
สำหรับการสร้างตัวจำแนก AdaBoost โมดูล Scikit-learn มีให้ sklearn.ensemble.AdaBoostClassifier. ในขณะที่สร้างลักษณนามนี้พารามิเตอร์หลักที่โมดูลนี้ใช้คือbase_estimator. ที่นี่ base_estimator คือค่าของไฟล์base estimatorจากที่สร้างชุดบูสต์ หากเราเลือกค่าของพารามิเตอร์นี้เป็นค่าไม่มีตัวประมาณพื้นฐานจะเป็นDecisionTreeClassifier(max_depth=1).
ตัวอย่างการใช้งาน
ในตัวอย่างต่อไปนี้เรากำลังสร้างตัวจำแนก AdaBoost โดยใช้ sklearn.ensemble.AdaBoostClassifier และยังทำนายและตรวจสอบคะแนน
from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import make_classification
X, y = make_classification(n_samples = 1000, n_features = 10,n_informative = 2, n_redundant = 0,random_state = 0, shuffle = False)
ADBclf = AdaBoostClassifier(n_estimators = 100, random_state = 0)
ADBclf.fit(X, y)
เอาต์พุต
AdaBoostClassifier(algorithm = 'SAMME.R', base_estimator = None,
learning_rate = 1.0, n_estimators = 100, random_state = 0)
ตัวอย่าง
เมื่อติดตั้งแล้วเราสามารถคาดการณ์ค่าใหม่ได้ดังนี้ -
print(ADBclf.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))
เอาต์พุต
[1]
ตัวอย่าง
ตอนนี้เราสามารถตรวจสอบคะแนนได้ดังนี้ -
ADBclf.score(X, y)
เอาต์พุต
0.995
ตัวอย่าง
เรายังสามารถใช้ชุดข้อมูล sklearn เพื่อสร้างลักษณนามโดยใช้วิธี Extra-Tree ตัวอย่างเช่นในตัวอย่างด้านล่างเรากำลังใช้ชุดข้อมูล Pima-Indian
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import AdaBoostClassifier
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names = headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
seed = 5
kfold = KFold(n_splits = 10, random_state = seed)
num_trees = 100
max_features = 5
ADBclf = AdaBoostClassifier(n_estimators = num_trees, max_features = max_features)
results = cross_val_score(ADBclf, X, Y, cv = kfold)
print(results.mean())
เอาต์พุต
0.7851435406698566
การถดถอยด้วย AdaBoost
สำหรับการสร้าง Regressor ด้วยวิธี Ada Boost ห้องสมุด Scikit-learn มีให้ sklearn.ensemble.AdaBoostRegressor. ในขณะที่สร้าง regressor จะใช้พารามิเตอร์เดียวกับที่ใช้sklearn.ensemble.AdaBoostClassifier.
ตัวอย่างการใช้งาน
ในตัวอย่างต่อไปนี้เรากำลังสร้าง AdaBoost regressor โดยใช้ sklearn.ensemble.AdaBoostregressor และการทำนายค่าใหม่โดยใช้วิธีการทำนาย ()
from sklearn.ensemble import AdaBoostRegressor
from sklearn.datasets import make_regression
X, y = make_regression(n_features = 10, n_informative = 2,random_state = 0, shuffle = False)
ADBregr = RandomForestRegressor(random_state = 0,n_estimators = 100)
ADBregr.fit(X, y)
เอาต์พุต
AdaBoostRegressor(base_estimator = None, learning_rate = 1.0, loss = 'linear',
n_estimators = 100, random_state = 0)
ตัวอย่าง
เมื่อติดตั้งแล้วเราสามารถทำนายจากแบบจำลองการถดถอยได้ดังนี้ -
print(ADBregr.predict([[0, 2, 3, 0, 1, 1, 1, 1, 2, 2]]))
เอาต์พุต
[85.50955817]
การเพิ่มต้นไม้ไล่ระดับสี
เรียกอีกอย่างว่า Gradient Boosted Regression Trees(GRBT). โดยพื้นฐานแล้วเป็นลักษณะทั่วไปของการส่งเสริมฟังก์ชันการสูญเสียที่แตกต่างกันโดยพลการ สร้างแบบจำลองการทำนายในรูปแบบของแบบจำลองการทำนายสัปดาห์ทั้งชุด สามารถใช้สำหรับปัญหาการถดถอยและการจำแนกประเภท ข้อได้เปรียบหลักของพวกเขาคือการจัดการกับข้อมูลประเภทผสมโดยธรรมชาติ
การจำแนกประเภทด้วย Gradient Tree Boost
สำหรับการสร้างลักษณนาม Gradient Tree Boost โมดูล Scikit-learn มีให้ sklearn.ensemble.GradientBoostingClassifier. ในขณะที่สร้างลักษณนามนี้พารามิเตอร์หลักที่โมดูลนี้ใช้คือ 'การสูญเสีย' ในที่นี้ 'การสูญเสีย' คือค่าของฟังก์ชันการสูญเสียที่จะได้รับการปรับให้เหมาะสม ถ้าเราเลือกการสูญเสีย = เบี่ยงเบนหมายถึงความเบี่ยงเบนสำหรับการจำแนกประเภทด้วยผลลัพธ์ที่น่าจะเป็น
ในทางกลับกันหากเราเลือกค่าของพารามิเตอร์นี้เป็นเลขชี้กำลังมันจะกู้คืนอัลกอริทึม AdaBoost พารามิเตอร์n_estimatorsจะควบคุมจำนวนผู้เรียนในสัปดาห์ ชื่อไฮเปอร์พารามิเตอร์learning_rate (ในช่วง (0.0, 1.0]) จะควบคุมการติดตั้งมากเกินไปผ่านการหดตัว
ตัวอย่างการใช้งาน
ในตัวอย่างต่อไปนี้เรากำลังสร้างตัวแยกประเภท Gradient Boosting โดยใช้ sklearn.ensemble.GradientBoostingClassifier. เรากำลังปรับลักษณนามนี้กับผู้เรียน 50 สัปดาห์
from sklearn.datasets import make_hastie_10_2
from sklearn.ensemble import GradientBoostingClassifier
X, y = make_hastie_10_2(random_state = 0)
X_train, X_test = X[:5000], X[5000:]
y_train, y_test = y[:5000], y[5000:]
GDBclf = GradientBoostingClassifier(n_estimators = 50, learning_rate = 1.0,max_depth = 1, random_state = 0).fit(X_train, y_train)
GDBclf.score(X_test, y_test)
เอาต์พุต
0.8724285714285714
ตัวอย่าง
เรายังสามารถใช้ชุดข้อมูล sklearn เพื่อสร้างลักษณนามโดยใช้ Gradient Boosting Classifier ดังตัวอย่างต่อไปนี้เรากำลังใช้ชุดข้อมูล Pima-Indian
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import GradientBoostingClassifier
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names = headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
seed = 5
kfold = KFold(n_splits = 10, random_state = seed)
num_trees = 100
max_features = 5
ADBclf = GradientBoostingClassifier(n_estimators = num_trees, max_features = max_features)
results = cross_val_score(ADBclf, X, Y, cv = kfold)
print(results.mean())
เอาต์พุต
0.7946582356674234
การถดถอยด้วย Gradient Tree Boost
สำหรับการสร้าง Regressor ด้วยวิธี Gradient Tree Boost ห้องสมุด Scikit-learn มีให้ sklearn.ensemble.GradientBoostingRegressor. สามารถระบุฟังก์ชันการสูญเสียสำหรับการถดถอยผ่านการสูญเสียชื่อพารามิเตอร์ ค่าเริ่มต้นสำหรับการสูญเสียคือ "ls"
ตัวอย่างการใช้งาน
ในตัวอย่างต่อไปนี้เรากำลังสร้าง Gradient Boosting regressor โดยใช้ sklearn.ensemble.GradientBoostingregressor และยังค้นหาข้อผิดพลาดกำลังสองโดยใช้เมธอด mean_squared_error ()
import numpy as np
from sklearn.metrics import mean_squared_error
from sklearn.datasets import make_friedman1
from sklearn.ensemble import GradientBoostingRegressor
X, y = make_friedman1(n_samples = 2000, random_state = 0, noise = 1.0)
X_train, X_test = X[:1000], X[1000:]
y_train, y_test = y[:1000], y[1000:]
GDBreg = GradientBoostingRegressor(n_estimators = 80, learning_rate=0.1,
max_depth = 1, random_state = 0, loss = 'ls').fit(X_train, y_train)
เมื่อติดตั้งแล้วเราจะพบข้อผิดพลาดกำลังสองเฉลี่ยดังนี้ -
mean_squared_error(y_test, GDBreg.predict(X_test))
เอาต์พุต
5.391246106657164