前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习之鸢尾花-数据预处理

机器学习之鸢尾花-数据预处理

作者头像
python与大数据分析
发布2022-03-11 14:56:14
1.1K0
发布2022-03-11 14:56:14
举报
文章被收录于专栏:python与大数据分析

再次开启机器学习之路,这次选择鸢尾花案例,这个案例数据挺好玩的,可以验证无监督学习和有监督学习,有监督学习可以采用各种分类算法、决策树算法,无监督学习可以采用各种聚类,并基于目标结果进行验证准确性。

当然本文首先是如何获取数据,如何规范化数据,如何对数据进行可视化观测,观测的方法有很多种,有兴趣的可以看看seaborn。

代码语言:javascript
复制
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets

# --------------------------------------------------------------------
# sklearn中的数据集为多种格式类型,特征值,分类值,列标签都是分开的
# seaborn中的数据集为pandas格式要求
# 考虑到seaborn展示的方便性,用seaborn进行数据可视化探索
# 在此把sklearn中的数据集转换为seaborn格式要求,也算兼顾了对pandas的学习
# --------------------------------------------------------------------

# 鸢尾花数据集
iris = datasets.load_iris()

# 鸢尾花数据集键值
# iris.keys()
# dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])

# 鸢尾花数据集的特征矩阵
# iris['data']
# [[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]}
# 鸢尾花数据集的分类值,即目标数组
# iris['target']
# [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
# 鸢尾花数据集的特征标签名称
# iris['feature_names']
# ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
# 鸢尾花数据集的分类标签名称
# iris['target_names']
# ['setosa' 'versicolor' 'virginica']
# 鸢尾花数据集的数据路径
# iris.filename
# C:\Python\Python37\lib\site-packages\sklearn\datasets\data\iris.csv

# sns自带的iris是个pandas数据集,包含表头和分类
# iris = sns.load_dataset("iris")
#      sepal_length  sepal_width  petal_length  petal_width    species
# 0             5.1          3.5           1.4          0.2     setosa
# 1             4.9          3.0           1.4          0.2     setosa
pd_iris_data = pd.DataFrame(iris['data'],columns=iris['feature_names'])
pd_iris_target = pd.DataFrame(iris['target'],columns=['category'])
pd_iris = pd.concat([pd_iris_data, pd_iris_target], axis=1)
print(pd_iris)
def get_iris_target_name(x):
    if x['category']==0:
        return 'setosa'
    elif x['category']==1:
        return 'versicolor'
    else:
        return 'virginica'
# 函数式新增列判断
pd_iris['category_name']=pd_iris.apply(get_iris_target_name,axis=1)
# lambda式新增列推导
pd_iris['newcategory_name']=pd_iris['category'].apply(lambda x:'setosa' if x==0 else ('versicolor' if x==1 else 'virginica'))

# ---------------------seaborn的几种用法-----------------------
# seaborn.pairplot(data, hue=None, hue_order=None, palette=None, vars=None, x_vars=None, y_vars=None, kind='scatter', diag_kind='hist', markers=None, size=2.5, aspect=1, dropna=True, plot_kws=None, diag_kws=None, grid_kws=None)¶
# 数据参数
# vars : 与data使用,否则使用data的全部变量。参数类型:numeric类型的变量list。
# {x, y}_vars : 与data使用,否则使用data的全部变量。参数类型:numeric类型的变量list。
# dropna : 是否剔除缺失值。参数类型:boolean, optional
# 特殊参数
# kind : {‘scatter’, ‘reg’}, optional Kind of plot for the non-identity relationships.
# diag_kind : {‘hist’, ‘kde’}, optional。Kind of plot for the diagonal subplots.
# 基本参数
# size : 默认 6,图的尺度大小(正方形)。参数类型:numeric
# hue : 使用指定变量为分类变量画图。参数类型:string (变量名)
# hue_order : list of strings Order for the levels of the hue variable in the palette
# palette : 调色板颜色
# markers : 使用不同的形状。参数类型:list
# aspect : scalar, optional。Aspect * size gives the width (in inches) of each facet.
# {plot, diag, grid}_kws : 指定其他参数。参数类型:dicts

# 设置并使用 seaborn 默认的主题、尺寸大小以及调色板。
sns.set(style="ticks", color_codes=True)
# 指定分类变量的,散点图
# 两种方法指定x,y,hue列
# 第一种是在x_vars,y_vars,hue中指定,data作为一个整体
cols = ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
sns.pairplot(pd_iris, hue='category_name',kind='scatter', diag_kind='hist',x_vars=cols,y_vars=cols)
plt.show()
# 第二种是在data中指定x,y,hue列,hue指定分组列
# pandas中有多余的列,所以必须指定列,且hue列必须在前序的data列中
cols = ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)','category_name']
sns.pairplot(pd_iris[cols], hue='category_name',kind='scatter', diag_kind='hist')
plt.show()

# data=sns.load_dataset('iris')
# 使用标准sns.pairplot进行设置
# 散点图 + KDE图
# sns.pairplot(data)
# 散点图 + 分类 + 直方图
# sns.pairplot(data, hue='species',kind='scatter', diag_kind='hist')
# 散点图 + 分类 + KDE图
# sns.pairplot(data, hue='species',kind='scatter', diag_kind="kde")
# 散点图 + KDE图 + 调色板
# sns.pairplot(data, hue="species", palette="husl")
# # 散点图 + KDE图 + 图标
# sns.pairplot(data, hue="species", markers=["o", "s", "D"])
# # 散点图 + KDE图 + 回归线
# sns.pairplot(data, hue="species", kind="reg")
# plt.show()

# # 通过定制化方式进行参数设置,更加灵活和定制
# g = sns.PairGrid(data, hue="species")
# # 全局性图表类型设置
# g = g.map(plt.scatter)
# # 对角线图表类型设置
# g = g.map_diag(plt.hist)
# # 非对角线图表类型设置
# g = g.map_offdiag(plt.scatter)
# # 右上角图表类型设置
# g = g.map_upper(sns.kdeplot, lw=3, legend=False)
# # 左下角图表类型设置
# g = g.map_lower(sns.kdeplot, cmap="Blues_d")
# # 加图例
# g = g.add_legend()
# plt.show()

# ---------------------逻辑算法-----------------------

# ---------------------K近邻算法-----------------------

# ------------------高斯朴素贝叶斯-----------------------

# ---------------------决策树-----------------------

# ---------------------K Means聚类-----------------------

# ------------------高斯混合模型聚类-----------------------

# -------------------SVM支撑向量机-----------------------
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python与大数据分析 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档