日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

线性回归csv数据集_用mxnet的gluon线性回归训练只有两个特征的数据集

發(fā)布時(shí)間:2023/12/15 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性回归csv数据集_用mxnet的gluon线性回归训练只有两个特征的数据集 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

自從上次試著用最基礎(chǔ)的線性回歸訓(xùn)練一個(gè)有80個(gè)特征的數(shù)據(jù)集,梯度爆炸之后,今天拿一個(gè)簡(jiǎn)單到不能再簡(jiǎn)單的數(shù)據(jù)集試試能不能成功收斂。途中我們又會(huì)遇到什么問(wèn)題?

數(shù)據(jù)集

來(lái)自吳恩達(dá)機(jī)器學(xué)習(xí)課程第二周的課后練習(xí)。原本是txt文件,我通過(guò)下面三行代碼把數(shù)據(jù)集另存為了csv,可以在這里下載。

import pandas as pd df = pd.read_csv("ex1data2.txt",delimiter=',') df.columns=['size','bedroom','price'] df.to_csv('house_simple.csv')

讀取數(shù)據(jù)集

數(shù)據(jù)沒(méi)有分訓(xùn)練集和測(cè)試集,房子的特征只有面積和房間數(shù)兩個(gè)。 我們將通過(guò)pandas庫(kù)讀取并處理數(shù)據(jù)

導(dǎo)入這里需要的包

%matplotlib inline import d2lzh as d2l from mxnet import autograd, gluon, init, nd from mxnet.gluon import data as gdata, loss as gloss, nn import numpy as np import pandas as pd data = pd.read_csv('data/house/house_2_features.csv' ,index_col=0) data.head()

size bedroom price 0 1600 3 329900 1 2400 3 369000 2 1416 2 232000 3 3000 4 539900 4 1985 4 299900

data.shape (46, 3)

預(yù)處理數(shù)據(jù)集

我們對(duì)連續(xù)數(shù)值的特征做標(biāo)準(zhǔn)化(standardization):設(shè)該特征在整個(gè)數(shù)據(jù)集上的均值為$mu$,標(biāo)準(zhǔn)差為$sigma$。那么,我們可以將該特征的每個(gè)值先減去$mu$再除以$sigma$得到標(biāo)準(zhǔn)化后的每個(gè)特征值。對(duì)于缺失的特征值,我們將其替換成該特征的均值。

data = data.apply(lambda x: (x - x.mean()) / (x.std()))data.fillna(0);

標(biāo)準(zhǔn)化后,每個(gè)特征的均值變?yōu)?,所以可以直接用0來(lái)替換缺失值。

data.head()

size bedroom price 0 -0.495977 -0.226166 -0.073110 1 0.499874 -0.226166 0.236953 2 -0.725023 -1.526618 -0.849457 3 1.246762 1.074287 1.592190 4 -0.016724 1.074287 -0.311010

把數(shù)據(jù)集分成兩部分,訓(xùn)練集和測(cè)試集,并通過(guò)values屬性得到NumPy格式的數(shù)據(jù),并轉(zhuǎn)成NDArray方便后面的訓(xùn)練。

n_train=36 train_features = nd.array(data[['size','bedroom']][:n_train].values) test_features = nd.array(data[['size','bedroom']][n_train:].values) train_labels = nd.array(data.price[:n_train].values).reshape((-1, 1)) train_features.shape (36, 2) train_features[:3] [[-0.4959771 -0.22616564][ 0.4998739 -0.22616564][-0.72502285 -1.526618 ]] <NDArray 3x2 @cpu(0)>

定義模型

我們使用一個(gè)基本的線性回歸模型和平方損失函數(shù)來(lái)訓(xùn)練模型。 關(guān)于更多gluon使用的步驟請(qǐng)參考這里

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

初始化模型參數(shù)

net.initialize(init.Normal(sigma=0.01))

定義損失函數(shù)

loss = gloss.L2Loss()

定義優(yōu)化算法

創(chuàng)建一個(gè)Trainer實(shí)例,并指定學(xué)習(xí)率為0.03的小批量隨機(jī)梯度下降(sgd)為優(yōu)化算法。該優(yōu)化算法將用來(lái)迭代net實(shí)例所有通過(guò)add函數(shù)嵌套的層所包含的全部參數(shù)。這些參數(shù)可以通過(guò)collect_params函數(shù)獲取。

trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.03})

訓(xùn)練模型

隨機(jī)讀取包含batch_size個(gè)數(shù)據(jù)樣本的小批量

batch_size=4 train_iter = gdata.DataLoader(gdata.ArrayDataset(train_features, train_labels), batch_size, shuffle=True) num_epochs = 10 for epoch in range(1, num_epochs + 1):for X, y in train_iter:with autograd.record():l = loss(net(X), y)l.backward()trainer.step(batch_size)l = loss(net(train_features), train_labels)print('epoch %d, loss: %f' % (epoch, l.mean().asnumpy())) epoch 1, loss: 0.349735 epoch 2, loss: 0.255017 epoch 3, loss: 0.207258 epoch 4, loss: 0.180886 epoch 5, loss: 0.166463 epoch 6, loss: 0.156838 epoch 7, loss: 0.150244 epoch 8, loss: 0.145748 epoch 9, loss: 0.142224 epoch 10, loss: 0.139501

后記

暫時(shí)看訓(xùn)練是能收斂的,損失也比上次少很多很多。下次我們?cè)倏磶讉€(gè)問(wèn)題: + 怎么算測(cè)試集的房?jī)r(jià) + 有沒(méi)有過(guò)擬 + 損失函數(shù)的結(jié)果怎么看,是大還是小

新手村的小伙伴們,你們有什么看法呢?

此處圍觀我的github 博客,這里下載本文代碼

續(xù)集

總結(jié)

以上是生活随笔為你收集整理的线性回归csv数据集_用mxnet的gluon线性回归训练只有两个特征的数据集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。