1.利用python sklearn下载鸢尾花数据集,并分析数据集的维度属性,绘制二维散点图; 2.同时对鸢尾花数据集利用PCA和t-SNE进行降维,并对降维的结果进行可视化;

 1.利用python sklearn下载鸢尾花数据集,并分析数据集的维度属性,绘制二维散点图

 

#导入相关库
from joblib.numpy_pickle_utils import xrange
from sklearn.datasets import load_iris
import numpy as np
import matplotlib.pyplot as plt
import itertools
if __name__ == '__main__':

    data = load_iris()#加载数据,data字典对象
    x = data['data']
    y = data['target']
    col_name = data['feature_names']#列名

    plt.close('all')
    plt.figure(1)
    subplot_start = 321#绘制一个3行2列的图
    col_numbers = xrange(0, 4)
    col_pairs = itertools.combinations(col_numbers, 2)#后文详细介绍
    #plt.subplots_adjust(wspace=0.5)

    for i in col_pairs:
        plt.subplot(subplot_start)
        plt.scatter(x[:,i[0]], x[:,i[1]], c=y)#参数c为点设置颜色,不同类别花的点颜色不同
        plt.xlabel(col_name[i[0]])
        plt.ylabel(col_name[i[1]])

        subplot_start += 1
    plt.show()

输出结果: 

python鸢尾花散点图 python鸢尾花数据集分析_matlab

 

 

2.理解两种降维方法,线性的主成分分析(PCA)方法和非线性的t-SNE方法,将原理阐述清楚,同时对鸢尾花数据集利用PCA和t-SNE进行降维,并对降维的结果进行可视化;

让我们先用PCA进行降维

**主成分分析(Principal Component Analysis,PCA)是最常用的一种降维方法,通常用于高维数据集的探索与可视化,还可以用作数据压缩和预处PCA可以把具有相关性的高维变量合成为线性无关的低维变量,称为主成分。主成分能够尽可能保留原始数据的信息。 ** 目标 :已知鸢尾花数据是4维的,共三类样本。使用PCA实现对鸢尾花数据进行降维,实现在二维平面上的可视化。

**原理 :矩阵的主成分就是其协方差矩阵对应的特征向量,按照对应的特征值大小进行排序,最大的特征值就是第一主成分,其次是第二主成分,以此类推。 **

import matplotlib.pyplot as plt                  #导入相关工程包
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
 
data = load_iris()                               #加载鸢尾花数据
y = data.target                                 #使用Y表示数据集中的标签
X = data.data                                   #使用X表示数据集中的属性数据
pca = PCA(n_components=2)                        #加载PCA算法,设置降维后主成分数为2
reduced_X = pca.fit_transform(X)                  #对原始数据进行降维并保存在reduced_X中
 
red_x, red_y = [], []                          #第一类数据点
blue_x, blue_y = [], []                         #第二类数据点
green_x, green_y = [], []                         #第三类数据点
 
for i in range(len(reduced_X)):                   #利用for语句按类别把鸢尾花数据保存在不同列表中
    if y[i] == 0:
        red_x.append(reduced_X[i][0])
        red_y.append(reduced_X[i][1])
    elif y[i] == 1:
        blue_x.append(reduced_X[i][0])
        blue_y.append(reduced_X[i][1])
    else:
        green_x.append(reduced_X[i][0])
        green_y.append(reduced_X[i][1])
 
plt.scatter(red_x, red_y, c='r', marker='x')          #降维后数据点的可视化
plt.scatter(blue_x, blue_y, c='b', marker='D')
plt.scatter(green_x, green_y, c='g', marker='.')
plt.show()

输出结果: 

python鸢尾花散点图 python鸢尾花数据集分析_python_02

 

**T-distributed Stochastic Neighbor Embedding (T-SNE) 是一种可视化高维数据的工具。T-SNE 基于随机邻域嵌入,是一种非线性降维技术,用于在二维或三维空间中可视化数据。

Python API 提供 T-SNE 方法可视化数据。在本教程中,我们将简要了解如何在 Python 中使用 TSNE 拟合和可视化数据。

我们将从加载所需的库和函数开始。 获取鸢尾花数据集,采用t-SNE方法进行二维可视化,设置困惑度的三种不同取值(perplexity=5,30,300)观察可视化空间不同类别样本的分布情况。最后300,图形太大无法在页面显示。

#第二题
from re import M
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.manifold import TSNE
import pandas as pd
import seaborn as sns
iris = load_iris()
y = iris.target
X = iris.data
n_samples,n_features = X.shape
dicts = {0:'first',1:'second',2:'third'}
# Pandas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。
m = pd.Series(y)  
m = m.map(dicts)
for i in (5,30,300):
    tsne_model = TSNE(n_components=2, init='pca', learning_rate=200, perplexity=i)  # 两个影响较大的参数,这里为默认值
    # 四个特征转换为二维两个变量
    tsne = tsne_model.fit_transform(X)  
    # 将tsne的结果和标签组合为新的数据框
    Data_frame = pd.DataFrame({'tsne1': tsne[:, 0], 'tsne2': tsne[:, 1], 'y': m})  
    sns.lmplot(data=Data_frame, x='tsne1', y='tsne2', hue='y', fit_reg=False) 
    # 组合各项特征
    Data_frame2 = pd.DataFrame({'sepal length (cm)': X[:, 0], 'sepal width (cm)': X[:, 1], 'petal length (cm)': X[:, 2],
                        'petal width (cm)': X[:, 3], 'y': m}) 
    # 输出分类汇总的均值
    Data_frame2.groupby(Data_frame2['y']).mean()  
     # 分别求样本的最小值和最大值
    X_min, X_max = tsne.min(0), tsne.max(0) 
    X_norm = (tsne - X_min) / (X_max - X_min)  # 对样本的归一化处理
    for j in range(X_norm.shape[0]):
        plt.text(X_norm[j, 0], X_norm[j, 0], str(y[j]), color=plt.cm.Set1(y[j]), fontdict={'size': 8})
    plt.xticks([])
    plt.yticks([])
    plt.title('当perplexity=%d时'%i)
    plt.show()

python鸢尾花散点图 python鸢尾花数据集分析_数据集_03

python鸢尾花散点图 python鸢尾花数据集分析_数据集_04

 

python鸢尾花散点图 python鸢尾花数据集分析_python_05