Scikit-learn筆記01_收集到的資料到底適合捨麼學習演算應用?


上述sklearn官網擷取到的流程圖,可幫助我們決定應該採用何種預測方法。
流程從 START 開始,通過回答一系列問題來縮小演算法範圍
  • 假如資料筆數枚超過50筆,那應該去取更多數據再來進行。

  • 若要預測的是數值非類別,那Regression是唯一方法。當然又細分多種不同Regression方法,端視資料筆數以及是否加樣比重某些特徵值而定。

  • 倘若要預測的是某個資料類別(Category),那是否已有針對既定data定義好類別了?若還沒,那採用方式就應是非監督式Clustering或降維。反之則使用監督式學習的Classification,並視Sample資料筆數抉擇要用Liner SVC或SGD Classifier。


Python機器學習套件Scikit-Learn (SkLearn)
是一套開源套件並可商業使用,建構在Numpy,SciPy及Matplotlib之上。

根據官方網站功能分為主要六大部分

學習演算法方面
1.Classification (分類) ->監督
目標:將輸入數據分到預定義的類別中。

2.Regression (迴歸) ->監督
目標:預測連續值(如房價、溫度)。


3.Clustering (分群) ->非監督
目標:根據數據間的相似性將數據分為若干群組(無標籤)。


比較不同演算法結果方面
4.Model Selection (模型選定)
目標:比較不同模型的表現,選擇最佳模型及其超參數。


偏向資料前處裡方面
5.Preprocessing (預處理)
目標:清理和轉換數據,以適合於機器學習模型。

6.Dimensionality reduction (降維)
目標:減少數據的特徵數量,保留關鍵信息。


在Spyder開啟後終端下pip list可查看目前版本。





預設在scikit-learn套件中,資料集主要用
Bunch物件型別儲存,類似python鍵值對的字典資料格式儲存。

目前最新版1.3以上sklearn默認提供的內建資料集,俗稱toy datasets如下:



鳶尾花資料集(Anderson's Iris dataset):涵蓋鳶尾花數據,包含花萼(Sepal,下垂)跟花瓣(Petal,直立)的長度及寬度,品種則包含:山鳶尾(Setosa)、變色鳶尾(Versicolor)跟維吉尼卡鳶尾(Virginica)

特徵陣列(Feature matrix)
通常用大寫X表示,又常被稱作「特徵欄位」、「特徵變數」、「自變數」、「影響因子」
  • 列(row) : 資料集樣本
  • 欄(column) : 資料集屬性

目標陣列(Target matrix)
通常用小寫y表示。又稱作「應變數」、「輸出結果」
  • 每個值即表示每個樣本的類別


測試

from sklearn import datasets
import pandas as pd

iris_datasets=datasets.load_iris() #載入datasets裡的iris資料
print(type(iris_datasets)) #datasets裡的iris資料格式

print(type(iris_datasets.data))# 印出四欄位資料型態
print(type(iris_datasets.target))# 印出目標結果資料型態
print(type(iris_datasets.feature_names))# 印出四欄位名稱資料型態
print(iris_datasets.feature_names)  # 印出四欄位名稱(特徵)
print(iris_datasets.target_names)  # 印出目標(結果)欄位名稱
print(type(iris_datasets.target_names))# 印出目標欄位名稱資料型態
print(iris_datasets.target)  # 印出目標(結果)欄位的內容


Dimensionality 維度4,主要是因為花瓣長、寬跟花萼長、寬各兩個,總計4個欄位的維度。
去分類屬於第1、2、3類。

像肺腺癌則是有30個特徵值維度情況,去解30個變數的聯立方程式。
要2的30次方個運算式去解,因此維度愈高運算成本更高,涉及到降維處裡。

關於返回的Bunch物件格式回傳主要如下


藉由pandas將Bunch物件格式轉為dataFrame格式
多增加到另一個欄位flower_class
0:setosa
1:versicolor
2:virginica


測試程式

from sklearn import datasets
import pandas as pd

iris_datasets=datasets.load_iris() #載入datasets裡的iris資料

print(iris_datasets.target_names)  # 印出目標(結果)欄位名稱
#print(iris_datasets.target)  # 印出目標(結果)欄位的內容

iris_df=pd.DataFrame(iris_datasets.data,columns=iris_datasets.feature_names)
print(iris_df)

iris_df.loc[:,"flower_class"]=iris_datasets.target
print(iris_df)



留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header