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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

前言

自從上次試著用最基礎的線性回歸訓練一個有80個特征的數據集,梯度爆炸之后,今天拿一個簡單到不能再簡單的數據集試試能不能成功收斂。途中我們又會遇到什么問題?

數據集

來自吳恩達機器學習課程第二周的課后練習。原本是txt文件,我通過下面三行代碼把數據集另存為了csv,可以在這里下載。

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

讀取數據集

數據沒有分訓練集和測試集,房子的特征只有面積和房間數兩個。 我們將通過pandas庫讀取并處理數據

導入這里需要的包

%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)

預處理數據集

我們對連續數值的特征做標準化(standardization):設該特征在整個數據集上的均值為$mu$,標準差為$sigma$。那么,我們可以將該特征的每個值先減去$mu$再除以$sigma$得到標準化后的每個特征值。對于缺失的特征值,我們將其替換成該特征的均值。

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

標準化后,每個特征的均值變為0,所以可以直接用0來替換缺失值。

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

把數據集分成兩部分,訓練集和測試集,并通過values屬性得到NumPy格式的數據,并轉成NDArray方便后面的訓練。

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)>

定義模型

我們使用一個基本的線性回歸模型和平方損失函數來訓練模型。 關于更多gluon使用的步驟請參考這里

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

初始化模型參數

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

定義損失函數

loss = gloss.L2Loss()

定義優化算法

創建一個Trainer實例,并指定學習率為0.03的小批量隨機梯度下降(sgd)為優化算法。該優化算法將用來迭代net實例所有通過add函數嵌套的層所包含的全部參數。這些參數可以通過collect_params函數獲取。

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

訓練模型

隨機讀取包含batch_size個數據樣本的小批量

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

后記

暫時看訓練是能收斂的,損失也比上次少很多很多。下次我們再看幾個問題: + 怎么算測試集的房價 + 有沒有過擬 + 損失函數的結果怎么看,是大還是小

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

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

續集

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。