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()
输出结果:
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()
输出结果:
**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()