线性回归鸢尾花练习

鸢尾花数据集介绍:

Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性。iris以鸢尾花的特征作为数据来源,常用在分类操作中。该数据集由3种不同类型的鸢尾花的50个样本数据构成。其中的一个种类与另外两个种类是线性可分离的,后两个种类是非线性可分离的。

四个属性:

Sepal.Length(花萼长度),单位是cm;

Sepal.Width(花萼宽度),单位是cm;

Petal.Length(花瓣长度),单位是cm;

Petal.Width(花瓣宽度),单位是cm;

三个种类:

Iris Setosa(山鸢尾);

Iris Versicolour(杂色鸢尾);

Iris Virginica(维吉尼亚鸢尾)。

前7个数据如下表

 

Sepal.Length

Sepal.Width

Petal.Length

Petal.Width

Species

1

5.1

3.5

1.4

0.2

setosa

2

4.9

3

1.4

0.2

setosa

3

4.7

3.2

1.3

0.2

setosa

4

4.6

3.1

1.5

0.2

setosa

5

5

3.6

1.4

0.2

setosa

6

5.4

3.9

1.7

0.4

setosa

7

4.6

3.4

1.4

0.3

setosa

提取数据集中花瓣长度花瓣宽度数据,其中花瓣长度作为特征,花瓣宽度作为标签,即:我们根据花瓣长度来预测花瓣的宽度。可以将花瓣数据分为训练数据与测试数据,训练一个线性回归模型,并对测试数据进行预测。

第一步:导入相应的包

import numpy as np
import pandas as pd
from mxnet import autograd, nd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from mxnet.gluon import nn
from mxnet import init
from mxnet.gluon import loss as gloss 
from mxnet import gluon

第二步,将数据划分为训练集和测试集

df = pd.read_csv(r'D:\course\deep_learning\线性回归练习\iris.data',header=None) #读取文件
X = nd.array(df[2]) #花瓣长度
Y = nd.array(df[3]) #花瓣宽度
X = X.reshape(len(X),1)
Y = Y.reshape(len(Y),1)
#划分数据集,80%的数据用来训练,20%的数据用来测试
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0) 

num_input = 1 #输入特征个数为1,即花瓣长度
num_examples = 120 #训练样本个数
features = nd.array(X_train)
labels = nd.array(Y_train) #标签

第三步,将数据打包成需要的格式

from mxnet.gluon import data as gdata
batch_size = 10 
dataset = gdata.ArrayDataset(features, labels)
data_iter = gdata.DataLoader(dataset, batch_size, shuffle=True)

第四步,训练模型

net = nn.Sequential()
net.add(nn.Dense(1))

net.initialize(init.Normal(sigma=0.01)) #初始化

loss = gloss.L2Loss() #平方损失函数

#设置学习率为0.01
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate' : 0.01})

num_epochs = 5 #迭代次数
for epoch in range(num_epochs):
    for X,y in data_iter:
    
        with autograd. record():
            l = loss(net(X),y) 
        l. backward()
        trainer.step(batch_size)
    l = loss(net(features), labels)
    print('epoch %d, loss %f' % (epoch + 1,l.mean().asnumpy()))

迭代五次,损失从0.044510降到了0.033204

打印出权重w和偏置b

dense = net[0]
print(dense.weight.data())
print(dense.bias.data())

 

训练效果:

X = X_train.asnumpy()
Y = Y_train.asnumpy()
Y_Pred = net(X_train).asnumpy()

plt.scatter(X, Y, color='green')
plt.scatter(X, Y_Pred, color='red')
plt.xlabel(u"花瓣长度",fontproperties='SimHei')
plt.ylabel(u"花瓣宽度",fontproperties='SimHei')
plt.title(u"训练集",fontproperties='SimHei')
plt.show()

 

预测效果:

X = X_test.asnumpy()
Y = Y_test.asnumpy()
Y_Pred = net(X_test).asnumpy()

plt.scatter(X, Y, color='green')
plt.scatter(X, Y_Pred, color='red')
plt.xlabel(u"花瓣长度",fontproperties='SimHei')
plt.ylabel(u"花瓣宽度",fontproperties='SimHei')
plt.title(u"测试集",fontproperties='SimHei')
plt.show()

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

断头桥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值