再次开启机器学习之路,这次选择鸢尾花案例,这个案例数据挺好玩的,可以验证无监督学习和有监督学习,有监督学习可以采用各种分类算法、决策树算法,无监督学习可以采用各种聚类,并基于目标结果进行验证准确性。
当然本文首先是如何获取数据,如何规范化数据,如何对数据进行可视化观测,观测的方法有很多种,有兴趣的可以看看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:PythonPython37libsite-packagessklearndatasetsdatairis.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支撑向量机-----------------------