数据集划分

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)
相关推荐
飞升不如收破烂~5 分钟前
redis的map底层数据结构 分别什么时候使用哈希表(Hash Table)和压缩列表(ZipList)
算法·哈希算法
九圣残炎9 分钟前
【从零开始的LeetCode-算法】3354. 使数组元素等于零
java·算法·leetcode
程序猿小柒1 小时前
leetcode hot100【LeetCode 4.寻找两个正序数组的中位数】java实现
java·算法·leetcode
EterNity_TiMe_1 小时前
【论文复现】神经网络的公式推导与代码实现
人工智能·python·深度学习·神经网络·数据分析·特征分析
雨中rain1 小时前
贪心算法(1)
算法·贪心算法
不爱学习的YY酱1 小时前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
平头哥在等你2 小时前
求一个3*3矩阵对角线元素之和
c语言·算法·矩阵
飞滕人生TYF2 小时前
动态规划 详解
算法·动态规划
_OLi_2 小时前
力扣 LeetCode 106. 从中序与后序遍历序列构造二叉树(Day9:二叉树)
数据结构·算法·leetcode
麦田里的稻草人w2 小时前
【数据分析实战】(一)—— JOJO战力图
数据挖掘·数据分析