机器学习(基础1)
数据集
sklearn玩具数据集
数据量小,数据在sklearn库的本地,只要安装了sklearn,不用上网就可以获取
sklearn现实世界数据集
数据量大,数据只能通过网络获取(为国外数据集,下载需要梯子)
sklearn加载玩具数据集
示例:获取鸢尾花数据
以鸢尾花数据集为例:
from sklearn.datasets import load_iris
iris = load_iris() # 鸢尾花数据
print(iris.data) # 特征数据
print(iris.feature_names) # 特征描述
print(iris.target) # 目标形状
print(iris.target_names) # 目标描述
特征有:
花萼长 sepal length;花萼宽sepal width; 花瓣长 petal length;花瓣宽 petal width。
三分类:
0-Setosa山鸢尾
1-Versicolour变色鸢尾
2-Virginica维吉尼亚鸢尾
可使用numpy,pandas将特征和目标一起显示出来
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
feature = iris.data
target = iris.target
target.shape = (len(target),1)
data = np.hstack([feature,target])
cols = iris.feature_names
cols.append('target')
arr = pd.DataFrame(data,columns=cols)
print(arr)
sklearn获取现实世界数据集
所有现实世界数据,通过网络才能下载后,默认保存的目录可以使用下面api获取。实际上就是保存到home目录
from sklearn import datasets
datasets.get_data_home() #查看数据集默认存放的位置
获取现实世界数据需要"科学上网"。
示例:获取20分类新闻数据
from sklearn.datasets import fetch_20newsgroups #这是一个20分类的数据
news = fetch_20newsgroups(data_home='./src',subset='all')
print(len(news.data)) #18846
print(news.target.shape) #(18846,)
print(len(news.target_names)) #20
print(len(news.filenames)) #18846
本地csv数据
创建csv文件
方式1:打开计事本,写出如下数据,数据之间使用英文下的逗号, 保存文件后把后缀名改为csv
csv文件可以使用excel打开
方式2:创建excel 文件, 填写数据,以csv为后缀保存文件.
pandas加载csv
使用pandas的read_csv(“文件路径”)函数可以加载csv文件,得到的结果为数据的DataFrame形式
语法:
pd.read_csv("./src/ss.csv")
数据集的划分
(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,train_size=0.8,random_state=22)
print(a,b)
a,b = train_test_split(data2,train_size=0.8,random_state=22)
print(a,b)
x_train,x_test,y_train,y_test = train_test_split(data1,data2,train_size=0.8,random_state=22)
print(x_train,x_test)
print(y_train,y_test)
当train_test_split函数参数传入两个data时,会将两个data,按照二八分,分割的值也是对应起来的,如,data1和data2中,1对应1a,2对应2a,分割后,也是相对应得
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'])
x_train,x_test,y_train,y_test = train_test_split(data1,data2,train_size=0.8,random_state=22)
print(x_train,x_test)
print(y_train,y_test)
print(type(x_train),type(x_test),type(y_train),type(y_test))
二维数组数据集划分
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)
x_train,x_test = train_test_split(data1,train_size=0.8,random_state=22)
print('x_train=\n',x_train)
print('x_test=\n',x_test)
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).reshape(5,3)
data1 = pd.DataFrame(data1,index=[1,2,3,4,5],columns=['one','two','three'])
print(data1)
x_train,x_test = train_test_split(data1,train_size=0.8,random_state=22)
print(x_train)
print(x_test)
字典数据集划分
可以划分非稀疏矩阵
用于将字典列表转换为特征向量。这个转换器主要用于处理类别数据和数值数据的混合型数据集
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},
]
model = DictVectorizer(sparse=False)#sparse=False表示返回一个完整的矩阵,sparse=True表示返回一个稀疏矩阵
data1 = model.fit_transform(data)#提取特征
print('data:\n',data1)
x_train,x_test = train_test_split(data1,train_size=0.8,random_state=22)
print('x_train:\n',x_train)
print('x_test:\n',x_train)
print(type(x_train),type(x_test))
鸢尾花数据集划分
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,train_size=0.8,random_state=22)
x_train,x_test,y_train,y_test = list
print(x_train.shape,x_test.shape,y_train.shape,y_test.shape)
现实世界数据集划分
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_20newsgroups
import numpy as np
news = fetch_20newsgroups(data_home='./src',subset='all')
list = train_test_split(news.data,news.target,train_size=0.8,random_state=22)
x_train,x_test,y_train,y_test = list
print(len(x_train), len(x_test), y_train.shape, y_test.shape)