机器学习基础算法9-鸢尾花数据集分析-PCA主成分分析与logistic回归(管道分
析)
⽂章⽬录
数据集介绍
鸢尾花数据集有三个类别,每个类别有50个样本。其中⼀个类别与另外两个线性可分,另外两个不能线性可分。
PCA主成分分析
1.基本原理
2.代码实现
回字组词# 鸢尾花数据集-PCA降维
# 特征之间是线性相关的,此时⽤到PCA
import pandas as pd
from sklearn.decomposition import PCA
lors import ListedColormap
import matplotlib as mpl
import matplotlib.pyplot as plt
if __name__ =='__main__':
# pd.t_option('参数名', 参数值)设置相关显⽰选项,
# display.width:数据显⽰区域的总宽度,以总字符数计算。
pd.t_option('display.width',200)
# ⼀、获得数据
# 设置列名
columns =['pal_length','pal_width','petal_length','petal_width','type']
data = pd.read_csv('./iris.data', header=None, names=columns)
# pd.Categorical(ries),得到分类的对象,使⽤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('各⽅向⽅差:', plained_variance_)
print('⽅差所占⽐例:', plained_variance_ratio_)
# print(x)
# 绘图
# 颜⾊选择
cm_light = ListedColormap(['#77E0A0','#FF8080','#A0A0FF'])
cm_dark = ListedColormap(['g','r','b'])
# 在代码中指定中⽂字体,解决了matplotlib中中⽂⽆法显⽰的问题
plt.figure(facecolor='w')
# s:点的尺⼨ c:⾊彩或颜⾊序列 marker:散点的形状 cmap: 包含三列矩阵的⾊彩映射,⾊盘的意思
plt.scatter(x[:,0], x[:,1], s=30, c=y, marker='o', cmap=cm_dark)
# 参数:b:是否显⽰⽹格线的意思。ls(linestyle):设置⽹格线的风格
# 设置标签 fontsize:字体⼤⼩
plt.xlabel('组份1', fontsize=14)
plt.ylabel('组份2', fontsize=14)
plt.title('鸢尾花数据PCA降维', fontsize=18)
plt.show()
逻辑回归-管道-Pipeline
# 四、管道分析
# 将降维后的数据集进⾏分割-训练集与测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.7)
# 管道分析
通讯稿范文# Pipeline可以将许多算法模型串联起来,⽐如将特征提取、归⼀化、分类组织在⼀起形成⼀个典型的机器学习问题⼯作流 model = Pipeline([
# PolynomialFeatures:特征选择 degree:选择线性函数次数
('poly', PolynomialFeatures(degree=3, include_bias=True)),
('lr', LogisticRegressionCV(Cs=np.logspace(-3,4,8), cv=5, fit_intercept=Fal))])
model.fit(x_train, y_train)
print('最优参数:\n', _params('lr')['lr'].C_)
# 使⽤⽣成的模型进⾏分类识别
y_predict_1 = model.predict(x_train)
print('训练集精确度:\n', metrics.accuracy_score(y_train, y_predict_1))
y_predict_2 = model.predict(x_test)
print('测试集精确度:\n', metrics.accuracy_score(y_test, y_predict_2))怎样做粽子
# 绘制
# 对得到的结果进⾏绘图,即在PCA的图形上根据分类结果对不同类别进⾏绘制
# 横纵各采样500个值
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())
# ⽣成⼀个500个等距值的数组
t1 = np.linspace(x1_min, x1_max, N)
t2 = np.linspace(x2_min, x2_max, M)
# ⽣成⽹格采样点
# meshgrid函数通常使⽤在数据的⽮量化上。
# 它适⽤于⽣成⽹格型数据,可以接受两个⼀维数组⽣成两个⼆维矩阵,对应两个数组中所有的(x,y)对
x1, x2 = np.meshgrid(t1, t2)
# 测试点
# np.stack函数就是⼀个⽤于numpy数组堆叠的函数
# flat就是将⼆维矩阵转换为⼀维数组
x_show = np.stack((x1.flat, x2.flat), axis=1)
# 预测值
# 预测值
y_predict_3 = model.predict(x_show)
# 使之与输⼊的形状相同
y_predict_3 = y_shape(x1.shape)
plt.figure(facecolor='w')
# 预测值的显⽰
# pcolormesh: 伪彩图 pcolormesh(X, Y, C)杨恒明
# X,Y均为2-D array,如果为1-D 会⾃动⼴播,X和Y构成⽹格点阵
# X,Y对应位置元素x[i,j]和y[i,j]组成⼀个坐标点(x[i,j],y[i,j]),对样本周围(包括样本所在坐标)的四个坐标点进⾏着⾊,C代表着⾊⽅案 plt.pcolormesh(x1, x2, y_predict_3, 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)
# ⽹格
patchs =[mpatches.Patch(color='#77E0A0', label='Iris-tosa'),
彩陶壶
mpatches.Patch(color='#FF8080', label='Iris-versicolor'),
mpatches.Patch(color='#A0A0FF', label='Iris-virginica')]
# 设置图例
# fancybox=True:控制是否应在构成图例背景的FancyBboxPatch周围启⽤圆边
# framealpha=0.8:控制图例框架的 Alpha 透明度
# loc:图例所有figure位置
plt.legend(handles=patchs, fancybox=True, framealpha=0.8, loc='lower right')
# 标题
plt.title(u'鸢尾花Logistic回归分类效果', fontsize=17)
plt.show()
代码
# 鸢尾花数据集-PCA降维
# 特征之间是线性相关的,此时⽤到PCA
import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
lors import ListedColormap
import matplotlib as mpl
import matplotlib.pyplot as plt
del_lection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LogisticRegressionCV
from sklearn import metrics
import matplotlib.patches as mpatches
def extend(a, b):
return1.05*a-0.05*b,1.05*b-0.05*a
if __name__ =='__main__':
# pd.t_option('参数名', 参数值)设置相关显⽰选项,
# display.width:数据显⽰区域的总宽度,以总字符数计算。
pd.t_option('display.width',200)
# ⼀、获得数据
# 设置列名
columns =['pal_length','pal_width','petal_length','petal_width','type']
data = pd.read_csv('./iris.data', header=None, names=columns)
# pd.Categorical(ries),得到分类的对象,使⽤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('各⽅向⽅差:', plained_variance_)
print('⽅差所占⽐例:', plained_variance_ratio_)
# print(x)
# 绘图
# 颜⾊选择
cm_light = ListedColormap(['#77E0A0','#FF8080','#A0A0FF'])
cm_dark = ListedColormap(['g','r','b'])
# 在代码中指定中⽂字体,解决了matplotlib中中⽂⽆法显⽰的问题
plt.figure(facecolor='w')
# s:点的尺⼨ c:⾊彩或颜⾊序列 marker:散点的形状 cmap: 包含三列矩阵的⾊彩映射,⾊盘的意思
plt.scatter(x[:,0], x[:,1], s=30, c=y, marker='o', cmap=cm_dark)
# 参数:b:是否显⽰⽹格线的意思。ls(linestyle):设置⽹格线的风格舞蹈图片
# 设置标签 fontsize:字体⼤⼩
plt.xlabel('组份1', fontsize=14)
plt.ylabel('组份2', fontsize=14)
plt.title('鸢尾花数据PCA降维', fontsize=18)
plt.show()
# 四、管道分析
# 将降维后的数据集进⾏分割-训练集与测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.7)
# 管道分析
# Pipeline可以将许多算法模型串联起来,⽐如将特征提取、归⼀化、分类组织在⼀起形成⼀个典型的机器学习问题⼯作流
model = Pipeline([
# PolynomialFeatures:特征选择 degree:选择线性函数次数
('poly', PolynomialFeatures(degree=3, include_bias=True)),
('lr', LogisticRegressionCV(Cs=np.logspace(-3,4,8), cv=5, fit_intercept=Fal))])
model.fit(x_train, y_train)
print('最优参数:\n', _params('lr')['lr'].C_)
# 使⽤⽣成的模型进⾏分类识别
y_predict_1 = model.predict(x_train)
print('训练集精确度:\n', metrics.accuracy_score(y_train, y_predict_1))学术交流英语
y_predict_2 = model.predict(x_test)
print('测试集精确度:\n', metrics.accuracy_score(y_test, y_predict_2))
# 绘制