数据集划分

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)
相关推荐
ahadee28 分钟前
蓝桥杯每日真题 - 第7天
c++·vscode·算法·蓝桥杯
AnFany28 分钟前
LeetCode【0051】N皇后
python·算法·leetcode·回溯法·n皇后
可别是个可爱鬼29 分钟前
代码随想录 -- 动态规划 -- 完全平方数
数据结构·python·算法·leetcode·动态规划
青椒大仙KI1131 分钟前
24/11/14 算法笔记 EM算法期望最大化算法
人工智能·笔记·算法
一直学习永不止步33 分钟前
LeetCode题练习与总结:至少有 K 个重复字符的最长子串--395
java·算法·leetcode·字符串·滑动窗口·哈希表·分治
XY.散人34 分钟前
初识算法 · 位运算(2)
算法
迷迭所归处37 分钟前
动态规划 —— 子数组系列-环形子数组的最大和
算法·动态规划
wx200411021 小时前
树形dp总结
算法·深度优先·图论
数模竞赛Paid answer1 小时前
2023年MathorCup数学建模A题量子计算机在信用评分卡组合优化中的应用解题全过程文档加程序
数学建模·数据分析·mathorcup
妈妈说名字太长显傻1 小时前
【数据结构】交换排序——冒泡排序 和 快速排序
数据结构·算法·排序算法