机器学习 数据集

数据集

1. scikit-learn工具介绍

  1. Python语言机器学习工具
  2. Scikit-learn包括许多智能的机器学习算法的实现
  3. Scikit-learn文档完善,容易上手,丰富的API接口函数
  4. Scikit-learn官网:https://scikit-learn.org/stable/#
  5. Scikit-learn中文文档:https://scikitlearn.com.cn/
  6. scikit-learn中文社区

1.1 scikit-learn安装

参考以下安装教程:https://www.sklearncn.cn/62/

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-learn

1.2 Scikit-learn包含的内容

2 数据集

2.1 sklearn玩具数据集介绍

数据量小,数据在sklearn库的本地,只要安装了sklearn,不用上网就可以获取

2.2 sklearn现实世界数据集介绍

数据量大,数据只能通过网络获取

2.3 sklearn加载玩具数据集

示例1:鸢尾花数据

python 复制代码
from sklearn.datasets import load_iris
iris = load_iris()#鸢尾花数据

鸢尾花数据集介绍

特征有:

​ 花萼长 sepal length

​ 花萼宽sepal width

​ 花瓣长 petal length

​ 花瓣宽 petal width

三分类:

​ 0-Setosa山鸢尾

​ 1-versicolor变色鸢尾

​ 2-Virginica维吉尼亚鸢尾

  • sklearn.datasets.load_iris():加载并返回鸢尾花数据集

sklearn数据集的使用

sklearn数据集返回值介绍

load和fetch返回的数据类型datasets.base.Bunch(字典格式)

data:特征数据数组,是[n_samples * n_features]的二维numpy.ndarry数组

target:标签数组,是n_samples的一维numpy.ndarry数组

DESCR:数据描述

feature_names:特征名,新闻数据,手写数字、回归数据集没有

target_names:标签名

代码如下:

python 复制代码
#获取鸢尾花数据集的库
from sklearn.datasets import load_iris
import numpy as np
import pandas as pd
# 获取鸢尾花数据集
iris=load_iris()
# iris字典中有几个重要属性: 
# data 特征
data=iris.data
# print('鸢尾花数据集的前5条数据',data[:5])
'''[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
 [4.7 3.2 1.3 0.2]
 [4.6 3.1 1.5 0.2]
 [5.  3.6 1.4 0.2]]'''
 # feature_names 特征描述
feature_names=iris.feature_names
print(feature_names)#['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
# target  目标
target=iris.target
# 获取前五条数据的目标值
print(target[:5])# [0 0 0 0 0]
# target_names  目标描述
target_names=iris.target_names
print(target_names) #['setosa(山鸢尾)' 'versicolor(变色鸢尾花)' 'virginica(维基利亚鸢尾)']
# DESCR 数据集的描述
res=iris.DESCR
print(res)
# filename 下后到本地保存后的文件名
iris_filename=iris.filename
print(iris_filename)#iris.csv

示例2:分析糖尿病数据集

这是回归数据集,有442个样本,有可能就有442个目标值。

代码如下:

python 复制代码
# 获取糖尿病数据集的库
from sklearn.datasets import load_diabetes
import numpy as np
import pandas as pd
dia=load_diabetes()
# print(dia)
data=dia.data
# print('糖尿病数据的特征的前五条',data[:5])
'''
糖尿病数据的特征的前五条 [[ 0.03807591  0.05068012  0.06169621  0.02187239 -0.0442235  -0.03482076
  -0.04340085 -0.00259226  0.01990749 -0.01764613]
 [-0.00188202 -0.04464164 -0.05147406 -0.02632753 -0.00844872 -0.01916334
   0.07441156 -0.03949338 -0.06833155 -0.09220405]
 [ 0.08529891  0.05068012  0.04445121 -0.00567042 -0.04559945 -0.03419447
  -0.03235593 -0.00259226  0.00286131 -0.02593034]
 [-0.08906294 -0.04464164 -0.01159501 -0.03665608  0.01219057  0.02499059
  -0.03603757  0.03430886  0.02268774 -0.00936191]
 [ 0.00538306 -0.04464164 -0.03638469  0.02187239  0.00393485  0.01559614
   0.00814208 -0.00259226 -0.03198764 -0.04664087]]
'''
#获取特征名
feature_names=dia.feature_names
print(feature_names) #['age', 'sex', 'bmi', 'bp', 's1', 's2', 's3', 's4', 's5', 's6']
#获取目标值
target=dia.target
print(target[:5]) #[151.  75. 141. 206. 135.]
#获取目标名
# target_names=dia.target_names
# print(target_names[:5]) 因为糖尿病数据集是回归的,所以它的目标值是线上的点没有对应的名称
#获取糖尿病的描述
res=dia.DESCR
# print(res)

注意:

  • 因为糖尿病数据集是回归的,所以它的目标值是线上的点没有对应的名称

2.4 sklearn获取现实世界数据集

(1)所有现实世界数据,通过网络才能下载后,默认保存的目录可以使用下面api获取。实际上就是保存到home目录

py 复制代码
from sklearn import datasets
datasets.get_data_home()  #查看数据集默认存放的位置

(2)下载时,有可能回为网络问题而出问题,要"小心"的解决网络问题,不可言......

(3)第一次下载会保存的硬盘中,如果第二次下载,因为硬盘中已经保存有了,所以不会再次下载就直接加载成功了。

示例:获取20分类新闻数据

(1)使用函数: sklearn.datasets.fetch_20newsgroups(data_home,subset)

(2)函数参数说明:

(2.1) data_home

复制代码
None
	这是默认值,下载的文件路径为 "C:/Users/ADMIN/scikit_learn_data/20news-bydate_py3.pkz"
自定义路径
	例如 "./src", 下载的文件路径为"./20news-bydate_py3.pkz"

(2.2) subset

复制代码
"train",只下载训练集
"test",只下载测试集
"all", 下载的数据包含了训练集和测试集

(2.3) return_X_y,决定着返回值的情况

复制代码
False,这是默认值
True,

(3) 函数返值说明:

复制代码
当参数return_X_y值为False时, 函数返回Bunch对象,Bunch对象中有以下属性
    *data:特征数据集, 长度为18846的列表list, 每一个元素就是一篇新闻内容, 共有18846篇
    *target:目标数据集,长度为18846的数组ndarray, 第一个元素是一个整数,整数值为[0,20)
    *target_names:目标描述,长度为20的list
    *filenames:长度为18846的ndarray, 元素为字符串,代表新闻的数据位置的路径
    
当参数return_X_y值为True时,函数返回值为元组,元组长度为2, 第一个元素值为特征数据集,第二个元素值为目标数据集

代码

python 复制代码
import sklearn.datasets as datasets
from sklearn.datasets import fetch_20newsgroups
import numpy as np
import pandas as pd
path=datasets.get_data_home()
news=fetch_20newsgroups(data_home='./src',subset='all')
# print(news.data[0])
# print(news.target_names[:5])

data,target=fetch_20newsgroups(data_home='./src',subset='all',return_X_y=True)

2.5数据集的划分

python 复制代码
"""
1. 复习不定长参数
一个"*" 把多个参数转为元组
两个"*" 把多个关键字参数转为字典 
"""
def m(*a, **b):
    print(a)       #('hello', 123)
    print(b)       #{'name': '小王', 'age': 30, 'sex': '男'}    
m("hello", 123,  name="小王", age=30, sex="男")

2. 复习列表值的解析
list = [11,22,33]
a, b, c = list # a=11   b=22  c=33
a, b = ["小王",  30] #a="小王" b=30

(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 值为任意整数,表示随机种子,使用相同的随机种子对相同的数据集多次划分结果是相同的。否则多半不同
        strxxxx 分层划分,填y
2 返回值说明
	返回值为列表list, 列表长度与形参array接收到的参数数量相关联, 形参array接收到的是什么类型,list中对应被划分出来的两部分就是什么类型

(2)示例

列表数据集划分

因为随机种子都使用了相同的整数(22),所以划分的划分的情况是相同的。

代码如下:

python 复制代码
# 导入数据集划分的库
from sklearn.model_selection import train_test_split
# 1.列表数据集的划分
x=[1,2,3,4,5,6,7,8,9]#作为特征值
y=['1a','2a','3a','4a','5a','6a','7a','8a','9a']#作为目标值
# x,y的长度要一致
# 直接对特征值进行划分为训练集0.8和测试集0.2
x_train,x_test=train_test_split(x,test_size=0.2,shuffle=True,random_state=5)
# shuffle:表示是否打乱,random_state:设置随机种子
# print(x_train,x_test)#[9, 5, 8, 2, 1, 3, 6] [7, 4]顺序是随机的
# 对特征值和目标值进行划分为训练集0.8和测试集0.2
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,shuffle=True,random_state=5)
print(x_train,x_test)#[9, 8, 2, 1, 6, 7, 4] [3, 5]
print(y_train,y_test)#['9a', '8a', '2a', '1a', '6a', '7a', '4a'] ['3a', '5a']
# 划分时特征值和目标值划分的位置是一一对应的

注意:

  • 1.x(特征值),y(目标值)的长度要一致
  • 2.划分时特征值和目标值划分的位置是一一对应的
二维数组数据集划分
python 复制代码
# 2.二维数组数据集划分
x=np.arange(16).reshape(4,4)
y=np.arange(0,160,10).reshape(4,4)
# print(x)
# print(y)
# x,y的长度要一致
# 直接对特征值进行划分为训练集0.8和测试集0.2
x_train,x_test=train_test_split(x,test_size=0.2,shuffle=True,random_state=5)
# shuffle:表示是否打乱,random_state:设置随机种子
# print(x_train,x_test)#[9, 5, 8, 2, 1, 3, 6] [7, 4]顺序是随机的
# 对特征值和目标值进行划分为训练集0.8和测试集0.2
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,shuffle=True,random_state=5)
print(x_train)
print("="*20)
print(x_test)
print("="*20)
print(y_train)
print("="*20)
print(y_test)
'''
[[ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
====================
[[0 1 2 3]]
====================
[[ 40  50  60  70]
 [ 80  90 100 110]
 [120 130 140 150]]
====================
[[ 0 10 20 30]]
'''
DataFrame数据集划分

可以划分DataFrame, 划分后的两部分还是DataFrame

python 复制代码
x= np.arange(1, 16, 1)
x.shape=(5,3)
df = pd.DataFrame(x, index=[1,2,3,4,5], columns=["one","two","three"])
# print(df)

x_train,x_test = train_test_split(df,  test_size=0.4, random_state=22)
print("\n", x_train)
print("\n", x_test)
'''
 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.对于数值特征保持不变,直接作为特征的一部分

这样,整个数据集就被转换成了一个适合机器学习算法使用的特征向量形式

代码如下:

python 复制代码
# 字典数据集的划分
# 引入字典向量化的模块
from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split
# 创建一个字典
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进行向量化
data_new=transfer.fit_transform(data)
# print("data_new\n",data_new)
'''
<Compressed Sparse Row sparse matrix of dtype 'float64'
        with 15 stored elements and shape (5, 6)>
  Coords        Values
  (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
'''
data=data_new.toarray()
# print(x,type(x))
'''
[[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.]] <class 'numpy.ndarray'>
 
'''
x=data[:,:5]
y=data[:,5]
# print(x)
# print(y)
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,shuffle=True,random_state=42)
print(x_train.shape,x_test.shape)
print(y_train.shape,y_test.shape)
print(y_train)
'''
(4, 5) (1, 5)
(4,) (1,)
[40. 80. 20. 70.]
'''

注意:

  • 因为机器学习时只能对数字进行处理字典中不是数字的键不能直接处理,需要进行特征处理(向量化就是把他转化为数字)
鸢尾花数据集划分
python 复制代码
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
x,y=load_iris(return_X_y=True)
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,shuffle=True,random_state=42)
print(x_train.shape,x_test.shape)
print(y_train.shape,y_test.shape)
print(y_train)
'''
(120, 4) (30, 4)
(120,) (30,)
[0 0 1 0 0 2 1 0 0 0 2 1 1 0 0 1 2 2 1 2 1 2 1 0 2 1 0 0 0 1 2 0 0 0 1 0 1
 2 0 1 2 0 2 2 1 1 2 1 0 1 2 0 0 1 1 0 2 0 0 1 1 2 1 2 2 1 0 0 2 2 0 0 0 1
 2 0 2 2 0 1 1 2 1 2 0 2 1 2 1 1 1 0 1 1 0 1 2 2 0 1 2 2 0 2 0 1 2 2 1 2 1
 1 2 2 0 1 2 0 1 2]

'''
现实世界数据集划分
python 复制代码
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)
相关推荐
程序员小杰@7 分钟前
✨WordToCard使用分享✨
前端·人工智能·开源·云计算
海森大数据16 分钟前
人工智能可信度新突破:MIT改进共形分类助力高风险医学诊断
大数据·人工智能·分类
www_pp_25 分钟前
# 如何使用OpenCV进行发票的透视变换和二值化处理
人工智能·opencv·计算机视觉
love530love26 分钟前
好消息!PyCharm 社区版现已支持直接选择 WSL 终端为默认终端
linux·ide·人工智能·windows·python·pycharm
OpenLoong 开源社区27 分钟前
技术视界 | 青龙机器人训练地形详解(一):如何创建一个地形
人工智能·机器人·开源·人形机器人·openloong
Uranus^27 分钟前
Spring AI 入门(持续更新)
java·人工智能·spring·ai
数据与人工智能律师1 小时前
私服与外挂:刑事法律风险的深度剖析
大数据·人工智能·算法·云计算·区块链
lcw_lance1 小时前
IoT平台和AIoT平台的区别
人工智能·iot·aiot
jndingxin1 小时前
OpenCV 基于生物视觉模型的工具------模拟人眼视网膜的生物视觉机制类cv::bioinspired::Retina
人工智能·opencv·计算机视觉
结冰架构2 小时前
【AI提示词】马斯洛需求分析专家
大数据·人工智能·ai·需求分析·提示词