【機器學習】瞭解分類與迴歸、過擬合與欠擬合

另外,如果在研究中想使用mglearn模塊,各位可以在Anaconda的Pormpt裏輸入:pip install mglearn進行安裝。

# 在學習之前,先導入這些常用的模塊
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import mglearn

瞭解分類與迴歸

監督機器學習問題主要有兩種,一個是分類,一個是迴歸

分類是對目標進行預測,然後對其分成不同的類別,每種類別有對應的標籤。分類一分有二分類多分類兩種情況,在二分類中,通常將其中一類叫作正類,另一類叫做負類,至於誰是正類誰是負類,完全可以按照實際情況來決定。

迴歸是對目標進行預測,得出一個連續值,這個連續值可以對數據的表現得出一個趨勢性的解釋。在編程術語中,這個連續值叫做浮點數,在數學術語中叫做實數

分類示例圖:


迴歸示例圖:


瞭解泛化、過擬合與欠擬合

泛化:如果一個模型能夠對沒有見過的數據做出準確預測,我們就說這唑訓練集泛化到測試集。

過擬合:模型在訓練數據中表現過度優越,而在新的數據中則表現不佳,此種情況被稱作過擬合。

欠擬合:模型無法抓取數據的重要特徵,而在訓練集與測試集表現都很差,此種情況被稱作欠擬合。

下圖依次表現了欠擬合、泛化、過擬合與的表現形式:

模型複雜度與數據集大小的關係

一般來說,數據量越大,其變化的範圍也就越大,在不發生過擬合的前提下,可使用的模型就越複雜。因此,數據量的大小對模型的影響非常大,永遠不要低估更多數據的力量。

瞭解機器學習算法使用的數據

沒有必要通讀每個算法的詳細描述,但瑞星殺毒軟件模型可以讓你更好地理解機器學習算法的各種工作原理!

首先,展示一個二分類數據集示例,這個數據被封裝在mglearn的forge數據集中,它有兩個特徵。

# 生成數據
X, y = mglearn.datasets.make_forge()
# 數據集繪圖
mglearn.discrete_scatter(X[:, 0], X[:, 1], y)
plt.legend(['Class 0', 'Class 1'], loc=4)
plt.xlabel('First feature')
plt.ylabel('Second feature')
print('數據結構:{}'.format(X.shape))
數據結構:(26, 2)

上圖的示例,是一個二分類的展示示例,圓點表示一類,三角表示另一個,機器學習期望從這個數據裏能將它們正確區分開來。

接下來,展示一個用於迴歸算法的示例,該數據集在mglearn的wave中,該數據集只有一個輸入特徵和一個連續的目標變量(或響應),後者是模型想要預測的對象。

X, y = mglearn.datasets.make_wave(n_samples=40)
plt.plot(X, y ,'o')
plt.ylim(-3, 3)
plt.xlabel('Feature')
plt.ylabel('Target')
Text(0,0.5,'Target')

以上兩例中的數據都是二維數據,這種數據被稱作低維度數據,如果有較多特徵的數據,則被叫做高維度數據,低維度數據中得出的結論一般不適用於高維度數據,但對於學習算法是很有記性的。

另外,因爲我們研究機器學習使用的是scikit-leran模型,該模塊中也內置了許多可供研究的數據,比如威斯康星州乳腺癌數據集(簡稱cancer),裏面記錄了乳腺癌腫瘤的臨牀測量數據。每個腫瘤都被標記爲“良性”或“惡性”,其任務是其於人體組織的測量數據來學習預測腫瘤是否爲惡性。該數據集可被用來做分類學習

該數據可以用 scikit-learn 模塊的 load_breast_cancer 函數來加載:

from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
cancer.keys()
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names'])
print('這個數據集共包含569個數據點,每個數據點有30個特徵。')
print(cancer.data.shape)
這個數據集共包含569個數據點,每個數據點有30個特徵。
(569, 30)
print('數據一種被標記爲惡性,一種被標記爲良性',cancer.target_names)
數據一種被標記爲惡性,一種被標記爲良性 ['malignant' 'benign']
print('其中212個被標記爲惡性,357個被標記爲記性',np.bincount(cancer.target))
其中212個被標記爲惡性,357個被標記爲記性 [212 357]
print('顯示所有的特徵標籤')
print(cancer.feature_names)
顯示所有的特徵標籤
['mean radius' 'mean texture' 'mean perimeter' 'mean area'
 'mean smoothness' 'mean compactness' 'mean concavity'
 'mean concave points' 'mean symmetry' 'mean fractal dimension'
 'radius error' 'texture error' 'perimeter error' 'area error'
 'smoothness error' 'compactness error' 'concavity error'
 'concave points error' 'symmetry error' 'fractal dimension error'
 'worst radius' 'worst texture' 'worst perimeter' 'worst area'
 'worst smoothness' 'worst compactness' 'worst concavity'
 'worst concave points' 'worst symmetry' 'worst fractal dimension']

sklearn 中還包括用於迴歸學習的數據集,例如波士頓房價數據集。與這個數據集相關的任務是,利用犯罪率、是否鄰近查爾斯河、公路可達性等信息,來預測20世紀70年代波士頓地區房價的中位數。

from sklearn.datasets import load_boston
boston = load_boston()
print('查看數據形狀', boston.data.shape)
查看數據形狀 (506, 13)

這裏不再具體詳細列出該數據的具體細節,之後將詳細使用這兩個數據進行學習。有興趣的的話,各位可以打印出各屬性看看。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章