线性分类的Jupyter实践

一、什么是鸢尾花数据集

鸢尾花数据集作为入门经典数据集。Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
  在三个类别中,其中有一个类别和其他两个类别是线性可分的。另外。在sklearn中已内置了此数据集。

 from sklearn.datasets import load_iris #导入IRIS数据集 
 iris = load_iris()  #特征矩阵

二、数据的载入

通过手动的方式将数据集进行读入

 f = open(path)
 2 x = []
 3 y = []
 4 for d in f:
 5     d = d.strip()
 6     if d:
 7         d = d.split(',')
 8         y.append(d[-1])
 9         x.append(list(map(float, d[:-1])))
10 x = np.array(x)
11 y = np.array(y)
12 print(x)
13 y[y == 'Iris-setosa'] = 0
14 y[y == 'Iris-versicolor'] = 1
15 y[y == 'Iris-virginica'] = 2
16 print(y)
17 y = y.astype(dtype=np.int)
18 print(y)

通过pandas库来进行数据的读取

 import numpy as np
 2 from sklearn.linear_model import LogisticRegression
 3 import matplotlib.pyplot as plt
 4 import matplotlib as mpl
 5 from sklearn import preprocessing
 6 import pandas as pd
 7 from sklearn.preprocessing import StandardScaler
 8 from sklearn.pipeline import Pipeline
 9 
10 df = pd.read_csv(path, header=0)
11 x = df.values[:, :-1]
12 y = df.values[:, -1]
13 print('x = \n', x)
14 print('y = \n', y)
15 le = preprocessing.LabelEncoder()
16 le.fit(['Iris-setosa', 'Iris-versicolor', 'Iris-virginica'])
17 print(le.classes_)
18 y = le.transform(y)
19 print('Last Version, y = \n', y)

三、模型可视化
我们可以在所选特征的范围内,从最大值到最小值构建一系列的数据,使得它能覆盖整个的特征数据范围,然后预测这些值所属的分类,并给它们所在的区域
上色,这样我们就能够清楚的看到模型每个分类的区域了,具体的代码如下所示:

1 N, M = 500, 500     # 横纵各采样多少个值
 2 x1_min, x1_max = x[:, 0].min(), x[:, 0].max()   # 第0列的范围
 3 x2_min, x2_max = x[:, 1].min(), x[:, 1].max()   # 第1列的范围
 4 t1 = np.linspace(x1_min, x1_max, N)
 5 t2 = np.linspace(x2_min, x2_max, M)
 6 x1, x2 = np.meshgrid(t1, t2)                    # 生成网格采样点
 7 x_test = np.stack((x1.flat, x2.flat), axis=1)   # 测试点
 8 
 9 cm_light = mpl.colors.ListedColormap(['#77E0A0', '#FF8080', '#A0A0FF'])
10 cm_dark = mpl.colors.ListedColormap(['g', 'r', 'b'])
11 y_hat = lr.predict(x_test)       # 预测值
12 y_hat = y_hat.reshape(x1.shape)                 # 使之与输入的形状相同
13 plt.pcolormesh(x1, x2, y_hat, cmap=cm_light)     # 预测值的显示
14 plt.scatter(x[:, 0], x[:, 1], c=y.ravel(), edgecolors='k', s=50, cmap=cm_dark)    
15 plt.xlabel('petal length')
16 plt.ylabel('petal width')
17 plt.xlim(x1_min, x1_max)
18 plt.ylim(x2_min, x2_max)
19 plt.grid()
20 plt.savefig('2.png')
21 plt.show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值