機器學習筆記: 初探scikit-learn 套件 - 小狐狸事務所
文章推薦指數: 80 %
在進入深度學習領域之前先熟悉scikit-lean 會比較好. ... 的Python 開放原始碼機器學習套件, 它實作了幾乎所有的主流機器學習演算法, 包含分類, 回歸, ...
2021年10月8日星期五
機器學習筆記:初探scikit-learn套件
雖然深度學習是機器學習裡最受重視的項目,但有些任務並不一定要用到深度學習,利用傳統的機器學習套件scikit-learn就能取得很好的表現.在進入深度學習領域之前先熟悉scikit-lean會比較好.本篇是閱讀下列幾本書關於scikit-learn的筆記: 從scikit-learn一步一腳印(佳魁,黃永昌)Scikit-Learn新手的晉級(博碩,張浩然譯)Python資料科學與人工智慧應用實務 (旗標,陳允傑)scikit-learnCookbook,2ndedition(Packt,2017)PythonScikit-LearnforBeginners (AIPublishing,2021)TheMachineLearningWorkshop,2nd(Packt,2020)MasteringMachineLearningwithscikit-learn,2ndEdition(Packt,2017)MachineLearningwithscikit-learnQuickStartGuide(Packt,2018)Hands-OnMachineLearningwithscikit-learnandScientificPythonToolkits(Packt,2020)其中No.2是No.7的中譯本. Scikit-learn是一個基於Numpy與Scipy的Python開放原始碼機器學習套件,它實作了幾乎所有的主流機器學習演算法,包含分類,回歸,分群,降維,隨機森林,支持向量機,KNN,K-means等,並提供了資料預處理,特徵提取,超參數最佳化,以及模型評估等所需的函數模組,自2007年發布以來已經成為最受歡迎的機器學習套件之一. Scikit-learn源自 DavidCournapeau 的Google程式專案比賽作品scikits.learn,後來經過其他貢獻者例如FabianPedregosa等人重寫成為今日之面貌.其名稱源自於原作者最初是將其視為Scipy的機器學習擴充工具箱(extensiontoolkit),參考:#Wiki:Scikit-learn# https://scikit-learn.org/stable/Scikit-learn教學文件參考:# Day8-Scikit-learn介紹(1)# Day10-Scikit-learn介紹(2)# Day11-Scikit-learn介紹(3)_FeatureEngineering# Day12-Scikit-learn介紹(4)_BayesClassification# Day13-Scikit-learn介紹(5)_Linear-Regression# Day14-Scikit-learn介紹(6)_GaussianLinearRegression# Day15-Scikit-learn介紹(7)_SupportVectorMachines# Day16-Scikit-learn介紹(8)_DecisionTrees# Day17-Scikit-learn介紹(9)_RandomForests# Day18-Scikit-learn介紹(10)_PrincipalComponentAnalysis# Day19-Scikit-learn介紹(11)_K-Means# Day20-Scikit-learn介紹(12)_GaussianMixtureModels# Day21-Scikit-learn介紹(13)_HOG+SVM# Scikit-Learn教學:Python與機器學習# Scikit-learnTutorial:MachineLearninginPython# Python中常用包——sklearn主要模組和基本使用方法Scikit-learn套件沒有自訂資料類別,完全使用Python本身的資料結構與Numpy陣列,並在其所有實作的演算法中提供了一致的呼叫介面,只要修改幾行程式碼即可用來對不同的演算法進行實驗,因此非常容易使用(easytouse), . Scikit-learn還自帶了許多資料集,sklearn.datasets模組提供了load_xxxx()函數來載入這些已清理過的玩具資料集(toydatasets),讓使用者能馬上用它們來進行測試與學習.透過fetch_xxxx()函數則可以擷取真實資料集(realdatasets),這樣一來使用者即可專注於演算法而無須花費時間去收集與清洗資料.不過,Scikit-learn並不支援分散式運算,故不適合用來處理超大型資料集.另一個缺點是它不支援深度學習. Scikit-learn的功能與應用如下:資料預處理(preprocessing)模型選擇(modelselection)監督式學習(supervisedlearning)分類(classification)-離散特徵回歸(regressing)-連續特徵非監督式學習(unsupervisedlearning)分群(clustering)降維(dimensionalityreduction)資料預處理包含資料清洗與資料轉換,資料清洗主要是將原始資料轉成結構化資料(通常是指二維表格資料),包含遺漏值處理與資料整併等,通常使用Pandas套件處理.資料轉換則是將清洗過的資料轉成適合機器學習演算法操作的格式,例如尺規(scale)轉換或正規化(normalization)轉換,以便演算法能達到最佳表現. 完成資料預處理後應該對資料進行探索以便選擇一個適合的機器學習模型(即演算法),因為不同的任務會因為選擇的機器學習模型而有不同的預測表現.然後即可用監督式與非監督式學習進行訓練與預測,這兩個就是scikit-learn的預測器功能.Scikit-learn的pipeline.Pipeline類別提供了模組化功能,可將轉換器與預測器打包成一個任務管線(pipeline),並使用預設的初始化參數讓轉換與預測一氣呵成. 在Scikit-learn官網有一張圖清楚地揭示使用sklearn進行機器學習專案的路徑:Source:Scikit-learn原圖網址:# http://scikit-learn.org/stable/_static/ml_map.png以下是簡單的初步測試: 1.安裝Scikit-learn: 在Windows下直接用pip/pip3指令即可安裝Scikit-learn:pipinstall-Uscikit-learn 在UbuntuLinux可用apt指令安裝: $sudoaptinstallpython-scikits-learn 也可以直接使用Google雲端硬碟上的Colab功能,這樣就完全不用安裝任何套件,只要用瀏覽器即可馬上進行測試,GoogleColab平台上所有機器學習工具一應俱全,且是最新版本,參考:# 方便好用的GoogleColab運算平台2.匯入sklearn套件: 雖然安裝時名稱為scikit-learn,但此名稱不符合Python套件規範,使用時真正要匯入的套件名稱是sklean,可用__verion__屬性檢視版本,用__file__屬性可檢查sklearn的安裝路徑: >>>importsklearn >>>sklearn.__version__ '0.20.2' >>>sklearn.__file__ 'C:\\Python37\\lib\\site-packages\\sklearn\\__init__.py'但實際在使用scikit-learn時通常不這樣匯入整個套件,而是用fromsklearnimportxxxx匯入特定的模組,例如: fromsklearn.preprocessingimportPolynomialFeatures fromsklearn.preprocessingimportStandardScaler fromsklearn.linear_modelimportLinearRegression fromsklearn.linear_modelimportRidge fromsklearn.linear_modelimportLogisticRegression fromsklearn.svmimportSVC fromsklearn.pipelineimportPipeline fromsklearn.model_selectionimporttrain_test_split fromsklearn.metricsimportmean_squared_error fromsklearn.metricsimportaccuracy_score上面這些就是scikit-learn常用的機器學習模組. 3.檢視sklearn內建的資料集: Scikit-learn套件的datasets模組中內建了非常豐富的資料集,並提供一致的load_xxxx()函數用來載入資料集xxxx.以下程式碼用來檢視datasets裡面內建了有哪些資料集: >>>fromsklearnimportdatasets #匯入datasets模組>>>lists=dir(datasets) #dir()會傳回模組中全部成員名稱之串列>>>foreinlists: #用迴圈走訪串列 ife.startswith('load'): #只顯示'load'開頭的成員 print(e) load_bostonload_breast_cancerload_diabetesload_digitsload_filesload_irisload_linnerudload_mlcompload_sample_imageload_sample_imagesload_svmlight_fileload_svmlight_filesload_wine可見總共內建了13套玩具資料集,包含知名的鳶尾花(iris),波士頓房地產(boston)等資料集.例如呼叫load_digits()可載入手寫數字資料集:>>>digits=datasets.load_digits() >>>digits {'data':array([[0., 0., 5.,..., 0., 0., 0.], [0., 0., 0.,...,10., 0., 0.], [0., 0., 0.,...,16., 9., 0.], ........ [0., 0., 2.,...,12., 0., 0.], [0., 0.,10.,...,12., 1., 0.]]), 'target':array([0,1,2,...,8,9,8]), 'target_names':array([0,1,2,3,4,5,6,7,8,9]), 'images':array([[[0., 0., 5.,..., 1., 0., 0.], [0., 0.,13.,...,15., 5., 0.], [0., 3.,15.,...,11., 8., 0.], ...,>>>digits.data[0] array([0., 0., 5.,13., 9., 1., 0., 0., 0., 0.,13.,15.,10., 15., 5., 0., 0., 3.,15., 2., 0.,11., 8., 0., 0., 4., 12., 0., 0., 8., 8., 0., 0., 5., 8., 0., 0., 9., 8., 0., 0., 4.,11., 0., 1.,12., 7., 0., 0., 2.,14., 5., 10.,12., 0., 0., 0., 0., 6.,13.,10., 0., 0., 0.])>>>digits.target[0] 0 另外,透過fetch_xxxx()函數則可以擷取真實資料集:>>>fordinm: ifd.startswith('fetch'): print(d) fetch_20newsgroupsfetch_20newsgroups_vectorizedfetch_california_housingfetch_covtypefetch_kddcup99fetch_lfw_pairsfetch_lfw_peoplefetch_mldatafetch_olivetti_facesfetch_openmlfetch_rcv1fetch_species_distributions4.檢視sklearn前處理函數: Scikit-learn在preprocessing模組中提供了豐富的資料前處理函數,可用dir()檢視: >>>fromsklearnimportpreprocessing >>>dir(preprocessing) ['Binarizer','CategoricalEncoder','FunctionTransformer','Imputer','KBinsDiscretizer','KernelCenterer','LabelBinarizer','LabelEncoder','MaxAbsScaler','MinMaxScaler','MultiLabelBinarizer','Normalizer','OneHotEncoder','OrdinalEncoder','PolynomialFeatures','PowerTransformer','QuantileTransformer','RobustScaler','StandardScaler','__all__','__builtins__','__cached__','__doc__','__file__','__loader__','__name__','__package__','__path__','__spec__','_discretization','_encoders','_function_transformer','add_dummy_feature','base','binarize','data','imputation','label','label_binarize','maxabs_scale','minmax_scale','normalize','power_transform','quantile_transform','robust_scale','scale']可用求值函式eval()來取得preprocessing類別的成員,只顯示一般成員,例如:>>>members=dir(preprocessing)>>>formbrinmembers: #走訪成員 obj=eval('preprocessing.'+mbr) #用eval()求值取得成員之參考 ifnotmbr.startswith('_'): #走訪所有不是"_"開頭的成員 print(mbr,type(obj)) Binarizer
延伸文章資訊
- 1一起幫忙解決難題,拯救IT 人的一天
今天來大概認識一下那些Python套件跟人工智慧是做什麼的 ... 深度學習第三代框架: 命令式深度學習框架:PyTorch(Python,GPU加速), MXNet 的Gluon API, T...
- 2CV+ 深度學習:AI 最完整的跨套件Python 人工智慧電腦視覺
Python 3為開發語言,並結合主流的深度學習框架進行實例展示。 涉及到的深度學習框架包括PyTorch、TensorFlow、Keras、Chainer、 MXNet等。 透過本書,讀者能夠...
- 3machine-learning: 機器學習:使用Python
一開始的主要目標是詳細說明scikit-learn套件中的範例程式的使用流程以及相關函式的使用方法。目前使用版本為scikit-learn version 0.19 以上。也將加入深度學習相關 ...
- 4機器學習筆記: 初探scikit-learn 套件 - 小狐狸事務所
在進入深度學習領域之前先熟悉scikit-lean 會比較好. ... 的Python 開放原始碼機器學習套件, 它實作了幾乎所有的主流機器學習演算法, 包含分類, 回歸, ...
- 5教你如何開始用Python進行機器學習、深度學習 - iThome
Python更是目前實作機器學習和深度學習最熱門的程式語言。 Scikit-Learn是Python實作機器學習的必學套件,重要常用的機器學習演算都可 ...