การเรียนรู้ของเครื่อง - เวิร์กโฟลว์อัตโนมัติ
บทนำ
เพื่อให้ดำเนินการและสร้างผลลัพธ์ได้สำเร็จโมเดลแมชชีนเลิร์นนิงจะต้องทำให้ขั้นตอนการทำงานมาตรฐานบางอย่างเป็นไปโดยอัตโนมัติ กระบวนการทำให้เวิร์กโฟลว์มาตรฐานเหล่านี้เป็นไปโดยอัตโนมัติด้วยความช่วยเหลือของ Scikit-learn Pipelines จากมุมมองของนักวิทยาศาสตร์ข้อมูลท่อเป็นแนวคิดทั่วไป แต่สำคัญมาก โดยทั่วไปจะช่วยให้การไหลของข้อมูลจากรูปแบบดิบไปยังข้อมูลที่เป็นประโยชน์บางอย่าง การทำงานของท่อสามารถเข้าใจได้ด้วยความช่วยเหลือของแผนภาพต่อไปนี้ -
บล็อกของท่อ ML มีดังนี้ -
Data ingestion- ตามชื่อมันเป็นขั้นตอนการนำเข้าข้อมูลเพื่อใช้ในโครงการ ML สามารถดึงข้อมูลแบบเรียลไทม์หรือเป็นกลุ่มจากระบบเดียวหรือหลายระบบ ถือเป็นหนึ่งในขั้นตอนที่ท้าทายที่สุดเนื่องจากคุณภาพของข้อมูลอาจส่งผลต่อโมเดล ML ทั้งหมด
Data Preparation- หลังจากนำเข้าข้อมูลเราจำเป็นต้องเตรียมข้อมูลที่จะใช้สำหรับโมเดล ML ของเรา การเตรียมข้อมูลล่วงหน้าเป็นหนึ่งในเทคนิคที่สำคัญที่สุดในการเตรียมข้อมูล
ML Model Training- ขั้นตอนต่อไปคือการฝึกโมเดล ML ของเรา เรามีอัลกอริธึม ML ที่หลากหลายเช่นภายใต้การดูแลไม่ได้รับการดูแลการเสริมแรงเพื่อดึงคุณสมบัติจากข้อมูลและทำการคาดคะเน
Model Evaluation- ต่อไปเราต้องประเมินแบบจำลอง ML ในกรณีของไปป์ไลน์ AutoML โมเดล ML สามารถประเมินได้ด้วยความช่วยเหลือของวิธีการทางสถิติและกฎเกณฑ์ทางธุรกิจต่างๆ
ML Model retraining- ในกรณีของท่อ AutoML ไม่จำเป็นว่ารุ่นแรกจะดีที่สุด โมเดลแรกถือเป็นโมเดลพื้นฐานและเราสามารถฝึกซ้ำได้เพื่อเพิ่มความแม่นยำของโมเดล
Deployment- ในที่สุดเราจำเป็นต้องปรับใช้โมเดล ขั้นตอนนี้เกี่ยวข้องกับการประยุกต์ใช้และโอนย้ายโมเดลไปยังการดำเนินธุรกิจเพื่อใช้งาน
ความท้าทายที่มาพร้อมกับ ML Pipelines
ในการสร้างท่อ ML นักวิทยาศาสตร์ข้อมูลต้องเผชิญกับความท้าทายมากมาย ความท้าทายเหล่านี้จัดอยู่ในสามประเภทต่อไปนี้ -
คุณภาพของข้อมูล
ความสำเร็จของ ML รุ่นใด ๆ ขึ้นอยู่กับคุณภาพของข้อมูลเป็นอย่างมาก หากข้อมูลที่เราให้กับโมเดล ML ไม่ถูกต้องเชื่อถือได้และมีประสิทธิภาพเราจะจบลงด้วยผลลัพธ์ที่ไม่ถูกต้องหรือทำให้เข้าใจผิด
ความน่าเชื่อถือของข้อมูล
ความท้าทายอีกประการหนึ่งที่เกี่ยวข้องกับไปป์ไลน์ ML คือความน่าเชื่อถือของข้อมูลที่เราจัดหาให้กับโมเดล ML ดังที่เราทราบอาจมีแหล่งข้อมูลหลายแหล่งที่นักวิทยาศาสตร์ข้อมูลสามารถรับข้อมูลได้ แต่เพื่อให้ได้ผลลัพธ์ที่ดีที่สุดต้องมั่นใจว่าแหล่งข้อมูลนั้นเชื่อถือได้และเชื่อถือได้
การเข้าถึงข้อมูล
เพื่อให้ได้ผลลัพธ์ที่ดีที่สุดจากไปป์ไลน์ ML ข้อมูลจะต้องสามารถเข้าถึงได้ซึ่งต้องมีการรวมการล้างและการจัดการข้อมูล เนื่องจากคุณสมบัติการเข้าถึงข้อมูลข้อมูลเมตาจะได้รับการอัปเดตด้วยแท็กใหม่
การสร้างแบบจำลองท่อ ML และการเตรียมข้อมูล
การรั่วไหลของข้อมูลที่เกิดขึ้นตั้งแต่ชุดข้อมูลการฝึกอบรมไปจนถึงการทดสอบชุดข้อมูลเป็นประเด็นสำคัญสำหรับนักวิทยาศาสตร์ข้อมูลที่ต้องจัดการขณะเตรียมข้อมูลสำหรับโมเดล ML โดยทั่วไปในช่วงเวลาของการเตรียมข้อมูลนักวิทยาศาสตร์ข้อมูลจะใช้เทคนิคต่างๆเช่นการกำหนดมาตรฐานหรือการทำให้เป็นมาตรฐานกับชุดข้อมูลทั้งหมดก่อนที่จะเรียนรู้ แต่เทคนิคเหล่านี้ไม่สามารถช่วยเราจากการรั่วไหลของข้อมูลได้เนื่องจากชุดข้อมูลการฝึกอบรมจะได้รับอิทธิพลจากขนาดของข้อมูลในชุดข้อมูลการทดสอบ
ด้วยการใช้ท่อ ML เราสามารถป้องกันการรั่วไหลของข้อมูลนี้ได้เนื่องจากไปป์ไลน์ทำให้มั่นใจได้ว่าการเตรียมข้อมูลเช่นการกำหนดมาตรฐานนั้นมีข้อ จำกัด ในแต่ละขั้นตอนการตรวจสอบความถูกต้องข้ามของเรา
ตัวอย่าง
ต่อไปนี้เป็นตัวอย่างใน Python ที่แสดงขั้นตอนการเตรียมข้อมูลและการประเมินโมเดล เพื่อจุดประสงค์นี้เราใช้ชุดข้อมูล Pima Indian Diabetes จาก Sklearn ขั้นแรกเราจะสร้างไปป์ไลน์ที่กำหนดมาตรฐานข้อมูล จากนั้นแบบจำลองการวิเคราะห์เชิงเส้นตรงจะถูกสร้างขึ้นและในที่สุดไปป์ไลน์จะได้รับการประเมินโดยใช้การตรวจสอบความถูกต้องข้าม 10 เท่า
ขั้นแรกให้นำเข้าแพ็คเกจที่ต้องการดังต่อไปนี้ -
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
ตอนนี้เราต้องโหลดชุดข้อมูล Pima diabetes ตามตัวอย่างก่อนหน้านี้ -
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
ต่อไปเราจะสร้างไปป์ไลน์ด้วยความช่วยเหลือของรหัสต่อไปนี้ -
estimators = []
estimators.append(('standardize', StandardScaler()))
estimators.append(('lda', LinearDiscriminantAnalysis()))
model = Pipeline(estimators)
ในที่สุดเราจะประเมินไปป์ไลน์นี้และแสดงผลลัพธ์ความแม่นยำดังนี้ -
kfold = KFold(n_splits=20, random_state=7)
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
เอาต์พุต
0.7790148448043184
ผลลัพธ์ข้างต้นเป็นข้อมูลสรุปความถูกต้องของการตั้งค่าบนชุดข้อมูล
การสร้างแบบจำลองท่อ ML และการสกัดคุณลักษณะ
การรั่วไหลของข้อมูลสามารถเกิดขึ้นได้ในขั้นตอนการแยกคุณลักษณะของรุ่น ML นั่นคือเหตุผลที่ควร จำกัด ขั้นตอนการแยกคุณลักษณะเพื่อหยุดการรั่วไหลของข้อมูลในชุดข้อมูลการฝึกอบรมของเรา ในกรณีของการเตรียมข้อมูลโดยใช้ท่อ ML เราสามารถป้องกันข้อมูลรั่วไหลได้เช่นกัน FeatureUnion ซึ่งเป็นเครื่องมือที่จัดทำโดยท่อ ML สามารถใช้เพื่อจุดประสงค์นี้
ตัวอย่าง
ต่อไปนี้เป็นตัวอย่างใน Python ที่แสดงให้เห็นถึงขั้นตอนการแยกคุณลักษณะและขั้นตอนการประเมินโมเดล เพื่อจุดประสงค์นี้เราใช้ชุดข้อมูล Pima Indian Diabetes จาก Sklearn
ประการแรกคุณสมบัติ 3 ประการจะถูกดึงออกมาด้วย PCA (การวิเคราะห์องค์ประกอบหลัก) จากนั้นคุณลักษณะ 6 ประการจะถูกแยกออกมาด้วยการวิเคราะห์ทางสถิติ หลังจากการแยกคุณสมบัติผลลัพธ์ของการเลือกคุณสมบัติหลายอย่างและขั้นตอนการแยกจะถูกรวมเข้าด้วยกันโดยใช้
เครื่องมือ FeatureUnion ในที่สุดแบบจำลอง Logistic Regression จะถูกสร้างขึ้นและไปป์ไลน์จะได้รับการประเมินโดยใช้การตรวจสอบความถูกต้องข้าม 10 เท่า
ขั้นแรกให้นำเข้าแพ็คเกจที่ต้องการดังต่อไปนี้ -
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import Pipeline
from sklearn.pipeline import FeatureUnion
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectKBest
ตอนนี้เราต้องโหลดชุดข้อมูล Pima diabetes ตามตัวอย่างก่อนหน้านี้ -
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
จากนั้นจะมีการสร้างคุณลักษณะร่วมกันดังต่อไปนี้ -
features = []
features.append(('pca', PCA(n_components=3)))
features.append(('select_best', SelectKBest(k=6)))
feature_union = FeatureUnion(features)
จากนั้นไปป์ไลน์จะสร้างขึ้นด้วยความช่วยเหลือของบรรทัดสคริปต์ต่อไปนี้ -
estimators = []
estimators.append(('feature_union', feature_union))
estimators.append(('logistic', LogisticRegression()))
model = Pipeline(estimators)
ในที่สุดเราจะประเมินไปป์ไลน์นี้และแสดงผลลัพธ์ความแม่นยำดังนี้ -
kfold = KFold(n_splits=20, random_state=7)
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
เอาต์พุต
0.7789811066126855
ผลลัพธ์ข้างต้นเป็นข้อมูลสรุปความถูกต้องของการตั้งค่าบนชุดข้อมูล