訓(xùn)練集與測(cè)試集
一般在進(jìn)行模型的測(cè)試時(shí)爆班,我們會(huì)將數(shù)據(jù)分為訓(xùn)練集和測(cè)試集。在給定的樣本空間中辱姨,拿出大部分樣本作為訓(xùn)練集來(lái)訓(xùn)練模型柿菩,剩余的小部分樣本使用剛建立的模型進(jìn)行預(yù)測(cè)。
-
訓(xùn)練集與測(cè)試集
train_test_split 函數(shù)利用偽隨機(jī)數(shù)生成器將數(shù)據(jù)集打亂雨涛。默認(rèn)情況下0.75為訓(xùn)練集,0.25測(cè)試集枢舶。
sklearn.model_selection.train_test_split
-
劃分?jǐn)?shù)據(jù)集其參數(shù)有:
arrays :允許的輸入是列表,數(shù)字陣列
test_size :float镜悉,int或None(默認(rèn)為無(wú)),如果浮點(diǎn)數(shù)應(yīng)在0.0和1.0之間祟辟,并且表示要包括在測(cè)試拆分中的數(shù)據(jù)集的比例。如果int侣肄,表示測(cè)試樣本的絕對(duì)數(shù)
train_size :float旧困,int或None(默認(rèn)為無(wú)),如果浮點(diǎn)數(shù)應(yīng)在0.0到1.0之間,表示數(shù)據(jù)集包含在列車(chē)拆分中的比例稼锅。如果int吼具,表示列車(chē)樣本的絕對(duì)數(shù)
random_state :int或RandomState,用于隨機(jī)抽樣的偽隨機(jī)數(shù)發(fā)生器狀態(tài),參數(shù) random_state 默認(rèn)設(shè)置為 None矩距,這意為著每次打散都是不同的拗盒。
from sklearn.model_selection import train_test_split
from sklearn import datasets
iris = datasets.load_iris()
print(iris.data.shape,iris.target.shape[0])
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.3,random_state=12)
print(X_train.shape,y_train.shape[0])
print(X_test.shape,y_test.shape[0])
(150, 4) 150
(105, 4) 105
(45, 4) 45
觀察數(shù)據(jù)
在構(gòu)建機(jī)器學(xué)習(xí)模型之前,通常最好檢查一下數(shù)據(jù)锥债,看看如果不用機(jī)器學(xué)習(xí)能不能輕松完成任務(wù)陡蝇,或者需要的信息有沒(méi)有包含在數(shù)據(jù)中。
此外哮肚,檢查數(shù)據(jù)也是發(fā)現(xiàn)異常值和特殊值的好方法登夫。舉個(gè)例子,可能有些鳶尾花的測(cè)量單位是英寸而不是厘米允趟。在現(xiàn)實(shí)世界中恼策,經(jīng)常會(huì)遇到不一致的數(shù)據(jù)和意料之外的測(cè)量數(shù)據(jù)。檢查數(shù)據(jù)的最佳方法之一就是將其可視化潮剪。一種可視化方法是繪制散點(diǎn)圖(scatter plot)涣楷。數(shù)據(jù)散點(diǎn)圖將一個(gè)特征作為 x 軸,另一個(gè)特征作為 y 軸抗碰,將每一個(gè)數(shù)據(jù)點(diǎn)繪制為圖上的一個(gè)點(diǎn)狮斗。不幸的是,計(jì)算機(jī)屏幕只有兩個(gè)維度弧蝇,所以我們一次只能繪制兩個(gè)特征(也可能是3 個(gè))碳褒。用這種方法難以對(duì)多于 3 個(gè)特征的數(shù)據(jù)集作圖迄汛。解決這個(gè)問(wèn)題的一種方法是繪制散點(diǎn)圖矩陣(pair plot),從而可以兩兩查看所有的特征骤视。如果特征數(shù)不多的話,比如我們這里有 4 個(gè)鹃觉,這種方法是很合理的专酗。但是你應(yīng)該記住,散點(diǎn)圖矩陣無(wú)法同時(shí)顯示所有特征之間的關(guān)系盗扇,所以這種可視化方法可能無(wú)法展示數(shù)據(jù)的某些有趣內(nèi)容祷肯。
-
pandas.plotting.scatter_matrix()
參數(shù): frame : DataFrame alpha : float,可選 應(yīng)用的透明度 figsize :( float疗隶,float)佑笋,可選 以英寸為單位的元組(寬度,高度) ax : Matplotlib軸對(duì)象斑鼻,可選 grid : bool蒋纬,可選 將此設(shè)置為T(mén)rue將顯示網(wǎng)格 diagonal : {'hist','kde'} 在'kde'和'hist'之間選擇對(duì)角線中的核密度估計(jì)或直方圖 marker : str坚弱,可選 Matplotlib標(biāo)記類(lèi)型蜀备,默認(rèn)為'o' hist_kwds : 其他繪圖關(guān)鍵字參數(shù) 要傳遞給hist函數(shù) density_kwds : 其他繪圖關(guān)鍵字參數(shù) 要傳遞給核密度估計(jì)圖 range_padding : float,可選 圖像在x軸荒叶,y軸原點(diǎn)附近留白碾阁,值越大,留白越多些楣,默認(rèn)值為0.05 kwds : 其他繪圖關(guān)鍵字參數(shù) 要傳遞給分散函數(shù)
數(shù)據(jù)點(diǎn)的顏色與鳶尾花的品種相對(duì)應(yīng)脂凶。為了繪制這張圖,我們首先將 NumPy 數(shù)組轉(zhuǎn)換成 pandas DataFrame愁茁。pandas 有一個(gè)繪制散點(diǎn)圖矩陣的函數(shù)蚕钦,叫作 scatter_matrix。矩陣的對(duì)角線是每個(gè)特征的直方圖
import pandas as pd
import mglearn
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 加載iris數(shù)據(jù)
iris = load_iris()
# 將數(shù)據(jù)分為訓(xùn)練集和測(cè)試集
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=12)
# 利用X_train中的數(shù)據(jù)創(chuàng)建DataFrame
# 利用iris_dataset.feature_names中的字符串對(duì)數(shù)據(jù)列進(jìn)行標(biāo)記
iris_dataframe = pd.DataFrame(X_train,columns=iris.feature_names)
# 利用DataFrame創(chuàng)建散點(diǎn)圖矩陣埋市,按y_train著色
grr = pd.plotting.scatter_matrix(iris_dataframe,c=y_train,figsize=(15,15),marker='o',
hist_kwds={'bins':20},s=60,alpha=0.8,cmap=mglearn.cm3)
從圖中可以看出冠桃,利用花瓣和花萼的測(cè)量數(shù)據(jù)基本可以將三個(gè)類(lèi)別區(qū)分開(kāi)。這說(shuō)明機(jī)器學(xué)習(xí)模型很可能可以學(xué)會(huì)區(qū)分它們道宅。
參考資料:
Python機(jī)器學(xué)習(xí)基礎(chǔ)教程
Pandas官方文檔