網(wǎng)站建站查詢最近的重大新聞
當(dāng)我們拿到數(shù)據(jù)集時(shí),首先需要對(duì)數(shù)據(jù)集進(jìn)行劃分訓(xùn)練集和測試集,sklearn提供了相應(yīng)的函數(shù)供我們使用
一、講解
快速隨機(jī)劃分?jǐn)?shù)據(jù)集,可自定義比例進(jìn)行劃分訓(xùn)練集和測試集
二、官網(wǎng)API
官網(wǎng)API
sklearn.model_selection.train_test_split(*arrays, test_size=None, train_size=None, random_state=None, shuffle=True, stratify=None)
導(dǎo)包:from sklearn.model_selection import train_test_split
為了方便說明,這里以一個(gè)具體的案例進(jìn)行分析
織物起球等級(jí)評(píng)定,已知織物起球個(gè)數(shù)N、織物起球總面積S、織物起球最大面積Max_s、織物起球平均面積Aver_s、對(duì)比度C、光學(xué)體積V這六個(gè)特征參數(shù)來確定最終的織物起球等級(jí)Grade
說白了:六個(gè)特征(N、S、Max_s、Aver_s、C、V),來確定最終的等級(jí)(Grade)
數(shù)據(jù)集可以自己簡單整個(gè),csv格式即可,我這里使用的是6個(gè)自變量X和1個(gè)因變量Y
參數(shù):
①*arrays
傳入因變量和自變量
這里的因變量為六個(gè)特征(N、S、Max_s、Aver_s、C、V)
自變量為最終評(píng)定的等級(jí)(Grade)
具體官網(wǎng)詳情如下:
②test_size
若給該參數(shù)傳入float浮點(diǎn)數(shù),則范圍為[0.0,1.0],表示測試集的比例
若給該參數(shù)傳入int整型數(shù),則表示測試集樣本的具體數(shù)量
若為None,則設(shè)置為train_size參數(shù)的補(bǔ)數(shù)形式
若該test_size參數(shù)和train_size參數(shù)的值均為None,則該test_size設(shè)置為0.25,按float浮點(diǎn)型對(duì)待
具體官網(wǎng)詳情如下:
③train_size
若給該參數(shù)傳入float浮點(diǎn)數(shù),則范圍為[0.0,1.0],表示訓(xùn)練集的比例
若給該參數(shù)傳入int整型數(shù),則表示訓(xùn)練集樣本的具體數(shù)量
若為None,則設(shè)置為test_size參數(shù)的補(bǔ)數(shù)形式
該參數(shù)跟test_size類似
具體官網(wǎng)詳情如下:
④random_state
隨機(jī)種子random_state,如果要是為了對(duì)比,需要控制變量的話,這里的隨機(jī)種子最好設(shè)置為同一個(gè)整型數(shù)
具體官網(wǎng)詳情如下:
⑤shuffle
是否在分割前對(duì)數(shù)據(jù)進(jìn)行洗牌
如果 shuffle=False 則 stratify 必須為 None
具體官網(wǎng)詳情如下:
⑥stratify
如果不是 “None”,數(shù)據(jù)將以分層方式分割,并以此作為類別標(biāo)簽
具體官網(wǎng)詳情如下:
返回值:
splitting
返回一個(gè)包含訓(xùn)練和測試分割之后的列表
具體官網(wǎng)詳情如下:
三、項(xiàng)目實(shí)戰(zhàn)
①導(dǎo)包
若導(dǎo)入過程報(bào)錯(cuò),pip安裝即可
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.model_selection import train_test_split
②加載數(shù)據(jù)集
數(shù)據(jù)集可以自己簡單整個(gè),csv格式即可,我這里使用的是6個(gè)自變量X和1個(gè)因變量Y
通過pandas讀入文本數(shù)據(jù)集,展示前五行數(shù)據(jù)
fiber = pd.read_csv("./fiber.csv")
fiber.head(5) #展示下頭5條數(shù)據(jù)信息
③劃分?jǐn)?shù)據(jù)集
前六列是自變量X,最后一列是因變量Y
參數(shù):
test_size
:測試集數(shù)據(jù)所占比例,這里是0.25,表示測試集占總數(shù)據(jù)集的25%
train_size
:訓(xùn)練集數(shù)據(jù)所占比例,這里是0.75,表示訓(xùn)練集占總數(shù)據(jù)集的75%
random_state
:隨機(jī)種子,為了控制變量
shuffle
:是否將數(shù)據(jù)進(jìn)行打亂
因?yàn)槲疫@里的數(shù)據(jù)集共48個(gè),訓(xùn)練集0.75,測試集0.25,即訓(xùn)練集36個(gè),測試集12個(gè)
返回值:
依此返回四個(gè)list,分別為訓(xùn)練集的自變量、測試集的自變量、訓(xùn)練集的因變量和測試集的因變量,分別通過X_train, X_test, y_train, y_test進(jìn)行接收
X = fiber.drop(['Grade'], axis=1)
Y = fiber['Grade']X_train, X_test, y_train, y_test = train_test_split(X,Y,train_size=0.75,test_size=0.25,random_state=42,shuffle=True)print(X_train.shape) #(36,6)
print(y_train.shape) #(36,)
print(X_test.shape) #(12,6)
print(y_test.shape) #(12,)
根據(jù)返回的四個(gè)list的shape可以看到數(shù)據(jù)集已經(jīng)成功按自定義需求劃分
⑤完整代碼
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.model_selection import train_test_splitfiber = pd.read_csv("./fiber.csv")
fiber.head(5) #展示下頭5條數(shù)據(jù)信息X = fiber.drop(['Grade'], axis=1)
Y = fiber['Grade']X_train, X_test, y_train, y_test = train_test_split(X,Y,train_size=0.75,test_size=0.25,random_state=42,shuffle=True)print(X_train.shape) #(36,6)
print(y_train.shape) #(36,)
print(X_test.shape) #(12,6)
print(y_test.shape) #(12,)