机器学习基础算法11-鸢尾花数据集分析-PCA主成分分析与logistic回归(管道分析)

本文介绍了鸢尾花数据集,重点探讨了PCA主成分分析的基本原理和代码实现,以及如何结合逻辑回归利用Pipeline进行模型构建。分析了模型的泛化能力,指出在提升模型复杂度时防止过拟合的重要性。
摘要由CSDN通过智能技术生成

数据集介绍

鸢尾花数据集有三个类别,每个类别有50个样本。其中一个类别与另外两个线性可分,另外两个不能线性可分。

PCA主成分分析

1.基本原理

在统计学中,主成分分析PCA是一种简化数据集的技术。它是一个线性变换。这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用于减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。
具体步骤见: https://baike.baidu.com/item/pca%E6%8A%80%E6%9C%AF/10408698?fr=aladdin

2.代码实现

# 鸢尾花数据集-PCA降维
# 特征之间是线性相关的,此时用到PCA
import pandas as pd
from sklearn.decomposition import PCA
from matplotlib.colors import ListedColormap
import matplotlib as mpl
import matplotlib.pyplot as plt

if __name__ == '__main__':

    # pd.set_option('参数名', 参数值)设置相关显示选项,
    # display.width:数据显示区域的总宽度,以总字符数计算。
    pd.set_option('display.width', 200)

    # 一、获得数据
    # 设置列名
    columns = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'type']
    data = pd.read_csv('./iris.data', header=None, names=columns)

    # pd.Categorical(series),得到分类的对象,使用categories或者codes进行查看
    # pd.Categorical( list ).codes 这样就可以直接得到原始数据的对应的序号列表,通过这样的处理可以将类别信息转化成数值信息
    # pd.Categorical( list ).categories可以查看具体类别
    data['type'] = pd.Categorical(data['type']).codes
    # print(data)

    # 二、数据处理
    # 特征值与目标值
    x = data.loc[:, columns[:-1]]
    y = data['type']

    # 三、特征工程
    # PCA降维
    # _components:组分的个数选择;  whiten:白化; random_state=0:伪随机数发生器种子
    pca = PCA(n_components=2, whiten=True, random_state=0)
    x = pca.fit_transform(x)
    # pca降维后,前两个组分在所有数据中所占信息的比例,一般来说80%的比例,说明已经具有较大的代表性。
    print('各方向方差:', pca.explained_variance_)
    print('方差所占比例:', pca.explained_variance_ratio_)
    # print(x)

    # 绘图
    # 颜色选择
    cm_light = ListedColormap(['#77E0A0', '#FF8080', '#A0A0FF'])
    cm_dark = ListedColormap(['g', 'r', 'b'])
    # 在代码中指定中文字体,解决了matplotlib中中文无法显示的问题
    mpl.rcParams['font.sans-serif'] = u'SimHei'
    mpl.rcParams['axes.unicode_minus'] = False

    plt.figure(facecolor='w')
    # s:点的尺寸  c:色彩或颜色序列 marker:散点的形状  cmap: 包含三列矩阵的色彩映射,色盘的意思
    plt.scatter(x[:, 0], x[:, 1], s=30, c=y, marker='o', cmap=c
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值