K近邻6-sklearn获取数据集及对数据集划分
1 案例:鸢尾花种类预测
Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。
2 scikit-learn中数据集介绍
-
获取数据集的方式
- sklearn.datasets.load_*() 加载小规模数据集
- sklearn.datasets.fetch_*(data_home=None,subset='train')
获取大规模数据集- data_home:下载保存数据文件的地址
- subset:'train'或者'test','all',可选,选择要加载的数据集的训练集、测试集、或全部数据
-
数据集可以调用的属性
- data:特征数据数组,大小为[n_samples * n_features]
- target:标签数组,是 n_samples 的一维数组
- feature_names:特征名,新闻数据,手写数字、回归这三类数据集没有
- target_names:标签名
from sklearn.datasets import load_iris
* 获取鸢尾花数据集
iris = load_iris()
print("鸢尾花数据集的返回值:\n", iris)
# 返回值是一个继承自字典的Bench
print("鸢尾花的特征值:\n", iris["data"])
print("鸢尾花的目标值:\n", iris.target)
print("鸢尾花特征的名字:\n", iris.feature_names)
print("鸢尾花目标值的名字:\n", iris.target_names)
print("鸢尾花的描述:\n", iris.DESCR)
- 查看数据分布
使用seaborn - 安装 pip3 install seaborn
- seaborn.lmplot(x = , y = , data =, hue = , fit_reg = )
在绘制二维散点图时,自动完成回归拟合- x, y 分别代表横纵坐标的列名
- data= 是关联到数据集
- hue=*代表按照 species即花的类别分类显示
- fit_reg=是否进行线性拟合
举例:
%matplotlib inline
# 内嵌绘图
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
# 把数据转换成dataframe的格式
iris_d = pd.DataFrame(iris['data'], columns = ['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width'])
iris_d['Species'] = iris.target
def plot_iris(iris, col1, col2):
sns.lmplot(x = col1, y = col2, data = iris, hue = "Species", fit_reg = False)
plt.xlabel(col1)
plt.ylabel(col2)
plt.title('鸢尾花种类分布图')
plt.show()
plot_iris(iris_d, 'Petal_Width', 'Sepal_Length')
结果:
3 数据集的划分
- 机器学习一般的数据集会划分为两个部分:
- 训练数据:用于训练,构建模型
- 测试数据:在模型检验时使用,用于评估模型是否有效
- 划分比例:
- 训练集:70% 80% 75%
- 测试集:30% 20% 25%
- 数据集划分api
sklearn.model_selection.train_test_split(x,y,test_size=,random_state=)
参数:- x 数据集的特征值
- y 数据集的标签值
- test_size 测试集的大小,一般为float
- random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
返回值:x_train, x_test(数据集), y_train, y_test(目标值)
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 1、获取鸢尾花数据集
iris = load_iris()
# 对鸢尾花数据集进行分割
# 训练集的特征值x_train 测试集的特征值x_test 训练集的目标值y_train 测试集的目标值y_test
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)
print("x_train:\n", x_train.shape)
# 随机数种子
x_train1, x_test1, y_train1, y_test1 = train_test_split(iris.data, iris.target, random_state=6)
x_train2, x_test2, y_train2, y_test2 = train_test_split(iris.data, iris.target, random_state=6)
print("如果随机数种子不一致:\n", x_train == x_train1)
print("如果随机数种子一致:\n", x_train1 == x_train2)