scikit-learn__02.1__iMachine-Learnng

Scikit-Learn簡介:使用Python進行機器學習

本課程將涵蓋Scikit-Learn的基礎知識,Scikit-Learn是一個受歡迎的軟件包,其中包含用Python編寫的機器學習工具集合。 有關更多信息,請訪問http://scikit-learn.org。

大綱

主要目標:介紹機器學習的中心概念,以及如何使用Scikit-learn軟件包將其應用在Python中。

機器學習的定義

scikit-learn中的數據表示

Scikit學習API簡介

關於Scikit-Learn

Scikit-Learn是一個Python軟件包,旨在通過乾淨,經過深思熟慮的API訪問Python代碼中的著名機器學習算法。 它由來自世界各地的數百名貢獻者構建,並在整個行業和學術界廣泛使用。

Scikit-Learn建立在Python的NumPy(數值Python)和SciPy(科學Python)庫的基礎上,它們可在Python中進行有效的核內數值和科學計算。 因此,儘管在這方面有一些工作,但scikit-learn並不是專門爲超大型數據集設計的。

對於這個簡短的介紹,我將堅持使用Scikit-learn對中小型數據集進行核心處理的問題。

什麼是機器學習?

在本節中,我們將開始探索機器學習的基本原理。 機器學習涉及構建具有可調整參數(通常是浮點值的數組)的程序,這些程序會自動調整,以便通過適應以前看到的數據來改善其行爲。

機器學習可以被視爲人工智能的一個子領域,因爲這些算法可以被視爲構建基塊,通過某種方式概括化而不是像存儲數據庫系統那樣存儲和檢索數據項,從而使計算機學習更智能的行爲。

在這裏,我們將看兩個非常簡單的機器學習任務。 第一個是分類任務:該圖顯示了二維數據的集合,這些數據根據兩個不同的類標籤進行了着色。 可以使用分類算法來繪製兩個點簇之間的劃分邊界:

%matplotlib inline
import matplotlib.pyplot as plt

plt.style.use('seaborn')
# Import the example plot from the figures directory
from fig_code import plot_sgd_separator
plot_sgd_separator()

在這裏插入圖片描述
這看似微不足道,但卻是一個非常重要概念的簡單版本。 通過畫出這條分隔線,我們學會了一個可以推廣到新數據的模型:如果將另一個未標記的點放到平面上,該算法現在可以預測它是藍點還是紅點。

如果您想查看用於生成此代碼的源代碼,則可以在圖形目錄中打開代碼,也可以使用%load magic命令來加載代碼:

我們將要看的下一個簡單任務是迴歸任務:一條簡單的最適合於一組數據的線:

from fig_code import plot_linear_regression
plot_linear_regression()

在這裏插入圖片描述
同樣,這是將模型擬合到數據的示例,以便模型可以對新數據進行概括。 該模型是從訓練數據中學到的,可用於預測測試數據的結果:此處,我們可能會得到一個x值,並且該模型將允許我們預測y值。 同樣,這似乎是一個瑣碎的問題,但這是機器學習任務的基本操作類型的基本示例。

Scikit學習中的數據表示

機器學習就是根據數據創建模型:因此,我們將從討論如何表示數據以便被計算機理解開始。 與此同時,我們將基於上一節中的matplotlib示例進行構建,並顯示一些如何可視化數據的示例。

在scikit-learn中實現的大多數機器學習算法都期望將數據存儲在二維數組或矩陣中。 數組可以是numpy數組,或者在某些情況下是scipy.sparse矩陣。 數組的大小預計爲[n_samples,n_features]

n_samples:樣本數量:每個樣本都是要處理(例如分類)的項目。 樣本可以是文檔,圖片,聲音,視頻,天文物體,數據庫或CSV文件中的一行,或者可以用固定的一組定量特徵描述的任何內容。

n_features:可以用來定量描述每個項目的特徵或不同特徵的數量。 特徵通常是實值,但在某些情況下可能是布爾值或離散值。

功能數量必須預先確定。 但是,它的尺寸可能非常高(例如,數百萬個特徵),對於給定的樣本,大多數特徵爲零。 在這種情況下,scipy.sparse矩陣很有用,因爲它們比numpy數組具有更高的內存效率。
在這裏插入圖片描述

一個簡單的例子:鳶尾花數據集

作爲簡單數據集的示例,我們將看一下scikit-learn存儲的鳶尾花數據。 數據包括對三種不同虹膜種類的測量。 數據集中存在三種虹膜,我們可以在此處進行圖片描述:

from IPython.core.display import Image, display
display(Image(filename='images/iris_setosa.jpg'))
print("Iris Setosa\n")

display(Image(filename='images/iris_versicolor.jpg'))
print("Iris Versicolor\n")

display(Image(filename='images/iris_virginica.jpg'))
print("Iris Virginica")

在這裏插入圖片描述
Iris Setosa
在這裏插入圖片描述
Iris Versicolor
在這裏插入圖片描述
Iris Virginica

快速提問:

如果我們想設計一種識別鳶尾花種類的算法,數據可能是什麼?

請記住:我們需要一個大小爲[n_samples x n_features]的2D數組。

n_samples指的是什麼?

n_features可能指的是什麼?

請記住,每個樣本必須有固定數量的特徵,並且每個樣本的特徵編號i必須是相似數量。

使用Scikit-Learn加載鳶尾花數據

Scikit-learn具有關於這些虹膜種類的非常直接的數據集。 數據包括以下內容:

鳶尾花數據集中的特徵:

萼片長度(釐米)
萼片寬度(釐米)
花瓣長度(釐米)
花瓣寬度(釐米)

目標類別以預測:

Iris Setosa
Iris Versicolour
Iris Virginica

scikit-learn嵌入了鳶尾花CSV文件的副本以及一個輔助函數,以將其加載到numpy數組中:

from sklearn.datasets import load_iris
iris = load_iris()
iris.keys()

dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])
n_samples, n_features = iris.data.shape
print((n_samples, n_features))
print(iris.data[0])

(150, 4)
[5.1 3.5 1.4 0.2]
print(iris.data.shape)
print(iris.target.shape)

(150, 4)
(150,)
print(iris.target)

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
print(iris.target_names)

['setosa' 'versicolor' 'virginica']

該數據是四維的,但是我們可以使用一個簡單的散點圖一次可視化兩個維

import numpy as np
import matplotlib.pyplot as plt

x_index = 0
y_index = 1

#此格式化程序將使用正確的目標名稱標記顏色欄
formatter = plt.FuncFormatter(lambda i, *args: iris.target_names[int(i)])

plt.scatter(iris.data[:, x_index], iris.data[:, y_index],
            c=iris.target, cmap=plt.cm.get_cmap('RdYlBu', 3))
plt.colorbar(ticks=[0, 1, 2], format=formatter)
plt.clim(-0.5, 2.5)
plt.xlabel(iris.feature_names[x_index])
plt.ylabel(iris.feature_names[y_index]);

在這裏插入圖片描述
快速練習:

在上面的腳本中更改x_index和y_index,並找到兩個參數的組合,這些參數最大程度地分隔了三個類。

本練習是降維的預覽,我們將在後面看到。

Other Available Data

它們有三種口味:

  • Packaged Data: 這些小型數據集與scikit-learn安裝打包在一起, 並可以使用中的工具下載 sklearn.datasets.load_*
  • Downloadable Data: 這些較大的數據集可供下載,而scikit-learn包含了簡化這一過程的工具。這些工具可以在 sklearn.datasets.fetch_*
  • Generated Data: 有幾個數據集是由基於隨機種子的模型生成的。這些都可以sklearn.datasets.make_*

您可以使用IPython的選項卡完成功能來研究可用的數據集加載器、獲取器和生成器。從’ ’ sklearn ’ ‘導入’ ‘數據集’ '子模塊後,鍵入

datasets.load_ + TAB

or

datasets.fetch_ + TAB

or

datasets.make_ + TAB

以查看可用函數的列表。

發佈了109 篇原創文章 · 獲贊 31 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章