鸢尾花数据集有三个类别,每个类别有50个样本。其中一个类别与另外两个线性可分,另外两个不能线性可分。
PCA降维原理和使用python和matlab实现降维
https://blog.csdn.net/weixin_42567027/article/details/107418146
最好先了解PCA原理,这样PCA后的数据就好理解了。
// An highlighted block import pandas as pd import numpy as np from sklearn.decomposition import PCA from sklearn.linear_model import LogisticRegressionCV from sklearn import metrics from sklearn.model_selection import train_test_split import matplotlib as mpl import matplotlib.pyplot as plt import matplotlib.patches as mpatches from sklearn.pipeline import Pipeline from sklearn.preprocessing import PolynomialFeatures def extend(a, b): return 1.05*a-0.05*b, 1.05*b-0.05*a if __name__ == '__main__': pd.set_option('display.width', 200) '''加载数据''' data = pd.read_csv('F:pythonlianxiiris.csv', header=None) #设置列标签 columns = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'type'] #rename:用于命名文件或目录 data.rename(columns=dict(zip(np.arange(5), columns)), inplace=True) #Categorical:将类别信息转化成数值信息,因此将type中的数据类型进行转化 data['type'] = pd.Categorical(data['type']).codes #print (data) '''数据集和标签集''' #x存储的是除type类外的数据,也就是数据集 x = data.loc[:, columns[:-1]] #y中存储的是type数据,也就是标签集 y = data['type'] #print(x) '''pca降维''' #输出的方差 可以结合pca降维的原理来理解 #n_components:组分的个数选择,在这个算法中,选择的是前两个组分 pca = PCA(n_components=2, whiten=True, random_state=0) #利用PCA降维技术对数据进行某种统一处理(比如标准化~N(0,1),将数据缩放(映射)到某个固定区间,归一化,正则化等) x = pca.fit_transform(x) #pca之后,前两个组分在所有数据中所占信息的比例,一般来说80%的比例,说明已经具有较大的代表性。 print( '各方向方差:', pca.explained_variance_) print ('方差所占比例:', pca.explained_variance_ratio_) # print (x[:5]) '''绘图''' #颜色选择 cm_light = mpl.colors.ListedColormap(['#77E0A0', '#FF8080', '#A0A0FF']) cm_dark = mpl.colors.ListedColormap(['g', 'r', 'b']) #文字转化 mpl.rcParams['font.sans-serif'] = u'SimHei' mpl.rcParams['axes.unicode_minus'] = False # #绘图 plt.figure(facecolor='w') plt.scatter(x[:, 0], x[:, 1], s=30, c=y, marker='o', cmap=cm_dark) #print(x[:, 0]) plt.grid(b=True, ls=':') #打标签 fontsize:字体大小 plt.xlabel(u'组份1', fontsize=14) plt.ylabel(u'组份2', fontsize=14) plt.title(u'鸢尾花数据PCA降维', fontsize=18) plt.show() 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
// An highlighted block '''使用逻辑回归模型进行分类识别''' #训练集和测试集按 7:3分开 x, x_test, y, y_test = train_test_split(x, y, train_size=0.7) #训练模型 model = Pipeline([ #PolynomialFeatures:特征选择 degree:选择线性函数次数 ('poly', PolynomialFeatures(degree=3, include_bias=True)), ('lr', LogisticRegressionCV(Cs=np.logspace(-3, 4, 8), cv=5, fit_intercept=False))]) #调参 model.fit(x, y) print ('最优参数:', model.get_params('lr')['lr'].C_) #使用生成的模型进行分类识别 y_hat = model.predict(x) print('训练集精确度:', metrics.accuracy_score(y, y_hat)) y_test_hat = model.predict(x_test) print('测试集精确度:', metrics.accuracy_score(y_test, y_test_hat)) '''绘图''' #对得到的结果进行绘图,即在PCA的图形上根据分类结果对不同类别进行绘制 N, M = 500, 500 # 横纵各采样多少个值 # x得到的数据的第0列的范围 x1_min, x1_max = extend(x[:, 0].min(), x[:, 0].max()) # x得到的数据的第1列的范围 x2_min, x2_max = extend(x[:, 1].min(), x[:, 1].max()) t1 = np.linspace(x1_min, x1_max, N) t2 = np.linspace(x2_min, x2_max, M) # 生成网格采样点 x1, x2 = np.meshgrid(t1, t2) # 测试点 x_show = np.stack((x1.flat, x2.flat), axis=1) # 预测值 y_hat = model.predict(x_show) # 使之与输入的形状相同 y_hat = y_hat.reshape(x1.shape) plt.figure(facecolor='w') plt.pcolormesh(x1, x2, y_hat, cmap=cm_light) # 预测值的显示 plt.scatter(x[:, 0], x[:, 1], s=30, c=y, edgecolors='k', cmap=cm_dark) # 样本的显示 #打标签 plt.xlabel(u'组份1', fontsize=14) plt.ylabel(u'组份2', fontsize=14) #对x,y坐标轴的坐标进行限制 plt.xlim(x1_min, x1_max) plt.ylim(x2_min, x2_max) plt.grid(b=True, ls=':') patchs = [mpatches.Patch(color='#77E0A0', label='Iris-setosa'), mpatches.Patch(color='#FF8080', label='Iris-versicolor'), mpatches.Patch(color='#A0A0FF', label='Iris-virginica')] plt.legend(handles=patchs, fancybox=True, framealpha=0.8, loc='lower right') plt.title(u'鸢尾花Logistic回归分类效果', fontsize=17) plt.show() 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
由于做线性回归预测时候,为了提高模型的泛化能力,经常采用多次线性函数建立模型。次数越多,学习的内容越多,但是也容易造成过拟合。
当使用二次函数时,即degree=2
当使用三次函数时,即degree=3
当使用四次函数时,即degree=4
对这个数据集的LR分类+模型评估
https://blog.csdn.net/weixin_42567027/article/details/107423666
相关知识
分析鸢尾花数据集
《机器学习》分析鸢尾花数据集
鸢尾花数据集下载
鸢尾花数据集可视化分析
机器学习数据集之鸢尾花
实验一:鸢尾花数据集分类
R语言数据分析案例:鸢尾花(IRIS)
数据分析之鸢尾花简单分析
【机器学习实战】科学处理鸢尾花数据集
对鸢尾花数据集和月亮数据集,分别采用线性LDA、k
网址: 鸢尾花数据集分析 https://m.huajiangbk.com/newsview546442.html
上一篇: python 引用计数问题 |
下一篇: R语言数据分析第二节 |