数据集划分
1、 sklearn玩具数据集介绍
数据量小,数据在sklearn库的本地,只要安装了sklearn,不用上网就可以获取
2 sklearn现实世界数据集介绍
数据量大,数据只能通过网络获取(科学上网)
3 sklearn加载玩具数据集
示例1:鸢尾花数据
from sklearn.datasets import load_iris
iris = load_iris()#鸢尾花数据
iris字典中有几个重要属性:
# data 特征
# feature_names 特征描述
# target 目标
# target_names 目标描述
# DESCR 数据集的描述
# filename 下后到本地保存后的文件名
print(iris.data)#得到特征
print(iris.feature_names) #特征描述
print(iris.target) #目标形状
print(iris.target_names)#目标描述
print(iris.filename) #iris.csv 保存后的文件名
print(iris.DESCR)#数据集的描述
下面使用pandas把特征和目标一起显示出来
示例2:分析糖尿病数据集
示例3:数字数据集
示例4:linnerud物理锻炼数据集
示例5:葡萄酒数据集
示例6:维斯康星州乳腺癌数据集
4 sklearn获取现实世界数据集
示例1:从AT&T中加载Olivetti人脸数据集
示例2:从20个新闻组数据集中加载文件名和数据
示例3:加载20个新闻组数据集并将其矢量化为令牌计数
5 本地csv数据
(1) 创建csv文件
方式1:打开计事本,写出如下数据,数据之间使用英文下的逗号, 保存文件后把后缀名改为csv
csv文件可以使用excel打开
方式2:创建excel 文件, 填写数据,以csv为后缀保存文件
(2) pandas加载csv
使用pandas的read_csv(“文件路径”)函数可以加载csv文件,得到的结果为数据的DataFrame形式
pd.read_csv("./src/ss.csv")
6 数据集的划分
(1) 函数
sklearn.model_selection.train_test_split(*arrays,**options)
参数
(1) *array
这里用于接收1到多个"列表、numpy数组、稀疏矩阵或padas中的DataFrame"。
(2) **options, 重要的关键字参数有:
test_size 值为0.0到1.0的小数,表示划分后测试集占的比例
random_state 值为任意整数,表示随机种子,使用相同的随机种子对相同的数据集多次划分结果是相同的。否则多半不同
2 返回值说明
返回值为列表list, 列表长度与形参array接收到的参数数量相关联, 形参array接收到的是什么类型,list中对应被划分出来的两部分就是什么类型
(2)示例
列表数据集划分
因为随机种子都使用了相同的整数(22),所以划分的划分的情况是相同的。
from sklearn.model_selection import train_test_split
data1 = [1, 2, 3, 4, 5]
data2 = ["1a", "2a","3a", "4a", "5a"]
a, b = train_test_split(data1, test_size=0.4, random_state=22)
print(a, b) #[4, 1, 5] [2, 3]
a, b = train_test_split(data2, test_size=0.4, random_state=22)
print(a, b) #['4a', '1a', '5a'] ['2a', '3a']
a, b, c, d = train_test_split(data1, data2, test_size=0.4, random_state=22)
print(a,b,c,d) #['4a', '1a', '5a'] ['2a', '3a']
ndarray数据集划分
划分前和划分后的数据类型是相同的 data1为list,划分后的a、b也是list data2为ndarray,划分后的c、d也是ndarray
from sklearn.model_selection import train_test_split
import numpy as np
data1 = [1, 2, 3, 4, 5]
data2 = np.array(["1a", "2a","3a", "4a", "5a"])
a, b, c, d = train_test_split(data1, data2, test_size=0.4, random_state=22)
print(a, b, c, d) #[4, 1, 5] [2, 3] ['4a' '1a' '5a'] ['2a' '3a']
print(type(a), type(b), type(c), type(d)) #<class 'list'> <class 'list'> <class 'numpy.ndarray'> <class 'numpy.ndarray'>
二维数组数据集划分
train_test_split只划分第一维度,第二维度保持不变
from sklearn.model_selection import train_test_split
import numpy as np
data1 = np.arange(1, 16, 1)
data1.shape=(5,3)
print(data1)
a, b = train_test_split(data1, test_size=0.4, random_state=22)
print("a=\n", a)
print("b=\n", b)
[[ 1 2 3][ 4 5 6][ 7 8 9][10 11 12][13 14 15]]
a=[[10 11 12][ 1 2 3][13 14 15]]
b=[[4 5 6][7 8 9]]
DataFrame数据集划分
可以划分DataFrame, 划分后的两部分还是DataFrame
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd
data1 = np.arange(1, 16, 1)
data1.shape=(5,3)
data1 = pd.DataFrame(data1, index=[1,2,3,4,5], columns=["one","two","three"])
print(data1)
a, b = train_test_split(data1, test_size=0.4, random_state=22)
print("\n", a)
print("\n", b)one two three
1 1 2 3
2 4 5 6
3 7 8 9
4 10 11 12
5 13 14 15
one two three
4 10 11 12
1 1 2 3
5 13 14 15
one two three
2 4 5 6
3 7 8 9
字典数据集划分
可以划分非稀疏矩阵
用于将字典列表转换为特征向量。这个转换器主要用于处理类别数据和数值数据的混合型数据集
1.对于类别特征DictVectorizer
会为每个不同的类别创建一个新的二进制特征,如果原始数据中的某个样本具有该类别,则对应的二进制特征值为1,否则为0。
2.对于数值特征保持不变,直接作为特征的一部分
这样,整个数据集就被转换成了一个适合机器学习算法使用的特征向量形式
from sklearn.feature_extraction import DictVectorizer
data = [{'city':'成都', 'age':30, 'temperature':20}, {'city':'重庆','age':33, 'temperature':60}, {'city':'北京', 'age':42, 'temperature':80},{'city':'上海', 'age':22, 'temperature':70},{'city':'成都', 'age':72, 'temperature':40},]
transfer = DictVectorizer(sparse=True)
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new)
x = data_new.toarray()
print(type(x))
print(x)
#(0,0)是矩阵的行列下标 30是值
data_new:(0, 0) 30.0(0, 3) 1.0(0, 5) 20.0(1, 0) 33.0(1, 4) 1.0(1, 5) 60.0(2, 0) 42.0(2, 2) 1.0(2, 5) 80.0(3, 0) 22.0(3, 1) 1.0(3, 5) 70.0(4, 0) 72.0(4, 3) 1.0(4, 5) 40.0
<class 'numpy.ndarray'>
# 第一行中:30表示age的值 0表示上海 0表示北京 1表示成都 0表示重庆 20表示temperature
[[30. 0. 0. 1. 0. 20.][33. 0. 0. 0. 1. 60.][42. 0. 1. 0. 0. 80.][22. 1. 0. 0. 0. 70.][72. 0. 0. 1. 0. 40.]]
a, b = train_test_split(data_new, test_size=0.4, random_state=22)
print(a)
print("\n", b)(0, 0) 22.0(0, 1) 1.0(0, 5) 70.0(1, 0) 30.0(1, 3) 1.0(1, 5) 20.0(2, 0) 72.0(2, 3) 1.0(2, 5) 40.0
(0, 0) 33.0(0, 4) 1.0(0, 5) 60.0(1, 0) 42.0(1, 2) 1.0(1, 5) 80.0
#data_new.toarray()是ndarray
a, b = train_test_split(data_new.toarray(), test_size=0.4, random_state=22)
print(a)
print("\n", b)
[[22. 1. 0. 0. 0. 70.][30. 0. 0. 1. 0. 20.][72. 0. 0. 1. 0. 40.]]
[[33. 0. 0. 0. 1. 60.][42. 0. 1. 0. 0. 80.]]
鸢尾花数据集划分
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris = load_iris()
list = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
#x_train训练特征数据集,x_test测试特征数据集, y_train训练目标数据集,y_test测试目标数据集,
x_train, x_test, y_train, y_test = list
#打印结果为: (120, 4) (30, 4) (120,) (30,)
print(x_train.shape, x_test.shape, y_train.shape, y_test.shape)
现实世界数据集划分
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
import numpy as np
news = fetch_20newsgroups(data_home=None, subset='all')
list = train_test_split(news.data, news.target,test_size=0.2, random_state=22)
# """
# 返回值是一个list:其中有4个值,分别为训练集特征、测试集特征、训练集目标、测试集目标
# 与iris相同点在于x_train和x_test是列表,而iris是
# """
x_train, x_test, y_train, y_test = list
#打印结果为: 15076 3770 (15076,) (3770,)
print(len(x_train), len(x_test), y_train.shape, y_test.shape)