日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

【线性回归——从简单构建到实现数据预测】

發(fā)布時間:2024/5/15 89 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【线性回归——从简单构建到实现数据预测】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

深度學(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)day03-線性回歸

  • 一、簡單的線性回歸
    • 1.1、數(shù)據(jù)集的構(gòu)建
    • 1.2、模型構(gòu)建
    • 1.3、損失函數(shù)
    • 1.4、模型優(yōu)化
    • 1.5、模型訓(xùn)練
    • 1.6、模型評估
    • 1.7、樣本數(shù)量和正則化系數(shù)的影響
  • 二、多項(xiàng)式回歸
    • 1.1、數(shù)據(jù)集的構(gòu)建
    • 1.2、模型構(gòu)建
    • 1.5、模型訓(xùn)練
    • 1.6、模型評估
  • 三、嘗試封裝Runner類
  • 四、基于線性回歸的波士頓房價(jià)預(yù)測
    • 4.1數(shù)據(jù)集介紹
    • 4.2數(shù)據(jù)清洗
      • 4.2.1缺失值分析
      • 4.2.2異常值處理
    • 4.3數(shù)據(jù)集的劃分
    • 4.4特征工程
    • 4.5模型構(gòu)建
    • 4.6完善Runner類
    • 4.7模型訓(xùn)練
    • 4.8 模型預(yù)測
  • 后話:一些問題


一、簡單的線性回歸

1.1、數(shù)據(jù)集的構(gòu)建

我們知道線性回歸要實(shí)現(xiàn)的方程式為:

我們通過一個簡單的函數(shù)linear_func來實(shí)現(xiàn)我們的一個簡單的線性回歸,并由此擴(kuò)展到多個特征的線性回歸模型。
linear_func是一個可以構(gòu)建構(gòu)建輸入特征和輸出標(biāo)簽的維度都為1的數(shù)據(jù)集函數(shù)。

def linear_func(x,w=1.2,b=0.5):y = w*x + breturn y

function:接下來構(gòu)造產(chǎn)生數(shù)據(jù)集的函數(shù),函數(shù)隨機(jī)產(chǎn)生一個num_data行1列的隨機(jī)數(shù)據(jù)集,并由linear_func確定標(biāo)簽值并添加噪聲值,從而使得數(shù)據(jù)集符合現(xiàn)實(shí)生活中并不那么完美的線性回歸。

import torchdef one_feature_data(func,random_x,num_data,noise=0.0,add_outlier=False,outlier_ratio=0.001):"""函數(shù)功能:根據(jù)給定的函數(shù)來生成簡單的數(shù)據(jù)集輸入:- func: 函數(shù)- random_x: x的取值范圍(list)- num_data: 生成的數(shù)據(jù)集個數(shù)- noise: 添加噪聲的大小,默認(rèn)為0- add_outlier: 是否添加異常點(diǎn),默認(rèn)為False- outlier_ratio: 異常值占比輸出:- X: 特征數(shù)據(jù),shape=[num_data,1]- Y: 標(biāo)簽數(shù)據(jù),shape=[num_data,1]"""#首先生成num_data個隨機(jī)數(shù),范圍在random_x之間X = torch.rand(shape=[num_data])*(random_x[1]-random_x[0])+random_x[0]#產(chǎn)生YY=func(X)#生成高斯分布的標(biāo)簽噪聲,使標(biāo)簽不完美。#用np.random.normal實(shí)現(xiàn)num_data個噪聲點(diǎn),0為均值,noise標(biāo)準(zhǔn)差的數(shù)據(jù)noise_Y = np.random.normal(0,noise,torch.tensor(num_data))Y = Y + noise_Y#查看異常值是否添加if add_outlier:#計(jì)算異常值個數(shù)outlier_num = int(num_data*outlier_ratio)#查看異常值個數(shù)是都為0if outlier_num!=0:#使用torch.randint生成在num_data個數(shù)下的outlier_num個異常值的位置outlier_id = torch.randint(num_data,shape=[outlier_num])#將選出的幾個異常位置的數(shù)據(jù)進(jìn)行異常處理Y[outlier_id] = Y[outlier_id]*5return X,Y

function:我們對上述的數(shù)據(jù)集進(jìn)行訓(xùn)練樣本和測試樣本的可視化,并對標(biāo)準(zhǔn)線進(jìn)行繪圖,從而知道我們要擬合的標(biāo)準(zhǔn)線。

import matplotlib.pyplot as plt #設(shè)置參數(shù) func = linear_func random_x = [-10,10] train_num = 100 #訓(xùn)練樣本的數(shù)目 test_num = 50 #測試樣本的數(shù)目 noise = 2 #生成訓(xùn)練集和測試集 X_train,Y_train = one_feature_data(func,random_x,num_data=train_num,noise=noise) print(X_train) print(Y_train) X_test,Y_test = one_feature_data(func,random_x,num_data=test_num,noise=noise) #生成一個大數(shù)據(jù)集 X_train_large,Y_train_large = one_feature_data(func,random_x,num_data=5000,noise=noise)#生成之前的標(biāo)準(zhǔn)線 X_underlying = torch.linspace(random_x[0],random_x[1],train_num) Y_underlying = linear_func(X_underlying) #數(shù)據(jù)的可視化 plt.scatter(X_train,Y_train,marker='*',facecolor="none",edgecolor='#e4007f',s=50,label="train_data") plt.scatter(X_test, Y_test, facecolor="none", edgecolor='#f19ec2', s=50, label="test data") plt.plot(X_underlying, Y_underlying, c='#000000', label=r"underlying distribution") plt.legend(fontsize='x-large') # 給圖像加圖例 plt.savefig('ml-vis.pdf') # 保存圖像到PDF文件中 plt.show()

可視化:

1.2、模型構(gòu)建

我們根據(jù):Y=WX + b來構(gòu)建最基本的式子:

#實(shí)現(xiàn)線性模型的通式,利用張量運(yùn)算來實(shí)現(xiàn) # X: tensor, shape=[N,D] # Y: tensor, shape=[N] # w: shape=[D,1] # b: shape=[1] Y = torch.matmul(X,w)+b

接下來我們嘗試創(chuàng)建一個自己的Linear類來實(shí)現(xiàn)線性回歸迭代的實(shí)現(xiàn)。
創(chuàng)建如下模型:

import torchtorch.manual_seed(10)# 線性算子 class Linear():def __init__(self, feature_size):"""輸入:- feature_size: 特征向量維度的大小"""self.feature_size = feature_size# 模型參數(shù)self.params = {}self.params['w'] = torch.randn([self.feature_size,1],dtype=torch.float32)self.params['b'] = torch.zeros([1], dtype=torch.float32)def __call__(self, X):return self.forward(X)def forward(self, X):"""輸入:- X:tensor,shape=[N,D]"""N, D = X.shape# 驗(yàn)證輸入特征數(shù)是否為0if self.feature_size == 0:return torch.full([N, 1], float(self.params['b']))# 驗(yàn)證數(shù)據(jù)的合法性assert D == self.feature_size# 使用torch.matmul()計(jì)算兩個tensor的乘積Y = torch.matmul(X, self.params['w']) + self.params['b']return Yfeature_size = 5 N = 2 X = torch.randn([N, feature_size], dtype=torch.float32) model = Linear(feature_size) Y = model(X) print("y_predict:", Y)

我們對剛建立的預(yù)測模型進(jìn)行最基本的測試,首先生成一個2行5列的隨機(jī)矩陣,然后傳入feature_size=5即5個特征的數(shù)據(jù),從而對模型進(jìn)行一次訓(xùn)練得到預(yù)測模型,然后傳入這個2行5列的矩陣從而傳入得到2個預(yù)測值。
預(yù)測結(jié)果如下:

1.3、損失函數(shù)

回歸任務(wù)是對連續(xù)值的預(yù)測,希望模型能根據(jù)數(shù)據(jù)的特征輸出一個連續(xù)值作為預(yù)測值。因此回歸任務(wù)中常用的評估指標(biāo)是均方誤差。
其中均方誤差沒有除2。
均方誤差 的定義為:

均方誤差的函數(shù)表示為:

import torch def mean_squared_error(y_label,y_predict):""":param y_label: 樣本真實(shí)標(biāo)簽:param y_predict: 樣本預(yù)測標(biāo)簽:return error: 誤差值"""assert y_label.shape[0] == y_predict.shape[0]#torch.square計(jì)算輸入的平方值#torch.mean沿axis方向做均值處理,默認(rèn)axis為None,則對輸入的全部元素計(jì)算平均值error = torch.mean(torch.square(y_predict - y_label))return error

我們采用一個簡單的樣例對該函數(shù)進(jìn)行測試,確保函數(shù)的正確性。

#構(gòu)造一個簡單的樣例對函數(shù)進(jìn)行測試 y_label = torch.tensor([[-0.2],[4.9]],dtype=torch.float64) y_predict = torch.tensor([[1.3],[2.5]],dtype=torch.float64)error = mean_squared_error(y_label,y_predict).item() print("error:",error)

測試結(jié)果:

1.4、模型優(yōu)化

采用經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化,線性回歸可以通過最小二乘法求出參數(shù)w和b的解析解。
最小二乘法 建立的最優(yōu)解為:

建立模型優(yōu)化器(最小二乘法)的函數(shù)如下:

def optimizer_lsm(model, X, y, reg_lamda=0):"""輸入:- model: 模型- X: tensor, 特征數(shù)據(jù),shape=[N,D]- y: tensor,標(biāo)簽數(shù)據(jù),shape=[N]- reg_lambda: float, 正則化系數(shù),默認(rèn)為0輸出:- model: 優(yōu)化好的模型"""N, D = X.shape# 對輸入特征數(shù)據(jù)所有特征向量求平均值(對于二維矩陣,axis=0表示對每列求均值)x_bar_tran = torch.mean(X, dim=0).T# 求標(biāo)簽的均值,shape=[1]y_bar = torch.mean(y)# torch.subtract通過廣播的方式實(shí)現(xiàn)矩陣減向量x_sub = torch.subtract(X, x_bar_tran)# 使用torch.all判斷輸入tensor是否全0if torch.all(x_sub == 0):model.params['b'] = y_barmodel.params['w'] = torch.zeros([D])return model# torch.inverse求方陣的逆tmp = torch.inverse(torch.matmul(x_sub.T, x_sub) + reg_lambda * torch.eye((D)))#最小二乘法求ww = torch.matmul(torch.matmul(tmp, x_sub.T), (y - y_bar))#最小二乘法求bb = y_bar - torch.matmul(x_bar_tran, w)model.params['b'] = bmodel.params['w'] = torch.squeeze(w, dim=-1)#返回優(yōu)化好的模型return model

1.5、模型訓(xùn)練

我們已經(jīng)建立好了模型,并且提到了損失函數(shù),也有了模型優(yōu)化器,接下來對我們已經(jīng)建立好的模型進(jìn)行求解。

#小數(shù)據(jù)集的模型訓(xùn)練 input_size = 1 model = Linear(input_size) model = optimizer_lsm(model,X_train.reshape([-1,1]),Y_train.reshape([-1,1])) print("w_pred:",model.params['w'].item(), "b_pred: ", model.params['b'].item()) #求訓(xùn)練集的誤差為 y_train_pred = model(X_train.reshape([-1,1])).squeeze() train_error = mean_squared_error(Y_train, y_train_pred).item() print("train error: ",train_error)

訓(xùn)練結(jié)果:

#打的數(shù)據(jù)集進(jìn)行訓(xùn)練 X_train_large, y_train_large = one_feature_data(func=linear_func, num_data = 5000,random_x=random_x, noise = 2,) model_large = Linear(input_size) model_large = optimizer_lsm(model_large,X_train_large.reshape([-1,1]),y_train_large.reshape([-1,1])) print("w_pred large:",model_large.params['w'].item(), "b_pred large: ", model_large.params['b'].item()) #求誤差 y_train_pred_large = model_large(X_train_large.reshape([-1,1])).squeeze() train_error_large = mean_squared_error(y_train_large, y_train_pred_large).item() print("train error large: ",train_error_large)

訓(xùn)練結(jié)果:

1.6、模型評估

我們對用訓(xùn)練集訓(xùn)練過了的模型進(jìn)行測試,來表達(dá)模型的性能,測試程序如下:

#小數(shù)據(jù)集進(jìn)行評估 y_test_pred = model(X_test.reshape([-1,1])).squeeze() test_error = mean_squared_error(Y_test, y_test_pred).item() print("test error: ",test_error) #大數(shù)據(jù)集進(jìn)行評估 y_test_pred_large = model_large(X_test.reshape([-1,1])).squeeze() test_error_large = mean_squared_error(Y_test, y_test_pred_large).item() print("test error large: ",test_error_large)

評估結(jié)果:

1.7、樣本數(shù)量和正則化系數(shù)的影響

(1) 調(diào)整訓(xùn)練數(shù)據(jù)的樣本數(shù)量,由 100 調(diào)整到 5000,觀察對模型性能的影響。
解: 當(dāng)樣本數(shù)量較小時,容易受到個別點(diǎn)的擾動,對于不同的數(shù)據(jù)集,實(shí)驗(yàn)結(jié)果產(chǎn)生誤差的可能性更大,模型性能較好。
當(dāng)樣本數(shù)量較大時,不容易受到個別樣本的擾動,對于不同的數(shù)據(jù)集,實(shí)驗(yàn)結(jié)果的誤差基本平衡,模型性能較好。
(2) 調(diào)整正則化系數(shù),觀察對模型性能的影響。
解: 正則化系數(shù)過大,導(dǎo)致了參數(shù)被過度正則化,特征參數(shù)趨近于0,導(dǎo)致了欠擬合。
正則化系數(shù)過小,而訓(xùn)練樣本的進(jìn)一步加大,會使參數(shù)的數(shù)目增多,導(dǎo)致模型的過擬合。
正則化系數(shù)在一定范圍內(nèi)調(diào)整時,會使模型的擬合效果編號

二、多項(xiàng)式回歸

1.1、數(shù)據(jù)集的構(gòu)建

導(dǎo)入我們所需要的一些庫:

import math import torch from matplotlib import pyplot as plt import numpy as np

由于是學(xué)習(xí)多項(xiàng)式回歸,所以在此我們假設(shè)我們要擬合的非線性函數(shù)為一個縮放后的sin函數(shù)。

# sin函數(shù): sin(2 * pi * x) def sin(x):y = torch.sin(2 * math.pi * x)return y

通線性回歸一樣的,我們生成數(shù)據(jù):

def one_feature_data(func, random_x, num_data, noise=0.0, add_outlier=False, outlier_ratio=0.001):"""函數(shù)功能:根據(jù)給定的函數(shù)來生成簡單的數(shù)據(jù)集輸入:- func: 函數(shù)- random_x: x的取值范圍(list)- num_data: 生成的數(shù)據(jù)集個數(shù)- noise: 添加噪聲的大小,默認(rèn)為0- add_outlier: 是否添加異常點(diǎn),默認(rèn)為False- outlier_ratio: 異常值占比輸出:- X: 特征數(shù)據(jù),shape=[num_data,1]- Y: 標(biāo)簽數(shù)據(jù),shape=[num_data,1]"""# 首先生成num_data個隨機(jī)數(shù),范圍在random_x之間X = torch.rand([num_data]) * (random_x[1] - random_x[0]) + random_x[0]# 產(chǎn)生YY = func(X)# 生成高斯分布的標(biāo)簽噪聲,使標(biāo)簽不完美。# 用np.random.normal實(shí)現(xiàn)num_data個噪聲點(diǎn),0為均值,noise標(biāo)準(zhǔn)差的數(shù)據(jù)noise_Y = torch.tensor(np.random.normal(0, noise, torch.tensor(Y.shape[0])))Y = Y + noise_Y# 查看異常值是否添加if add_outlier:# 計(jì)算異常值個數(shù)outlier_num = int(num_data * outlier_ratio)# 查看異常值個數(shù)是都為0if outlier_num != 0:# 使用torch.randint生成在num_data個數(shù)下的outlier_num個異常值的位置outlier_id = torch.randint(num_data, [outlier_num])# 將選出的幾個異常位置的數(shù)據(jù)進(jìn)行異常處理Y[outlier_id] = Y[outlier_id] * 5return X, Y# 生成數(shù)據(jù) func = sin interval = (0, 1) train_num = 15 test_num = 10 noise = 0.5 # 0.1 X_train, y_train = one_feature_data(func=func, random_x=interval, num_data=train_num, noise=noise) X_test, y_test = one_feature_data(func=func, random_x=interval, num_data=test_num, noise=noise)X_underlying = torch.linspace(interval[0], interval[1], steps=100) y_underlying = sin(X_underlying)# 繪制圖像 plt.rcParams['figure.figsize'] = (8.0, 6.0) plt.scatter(X_train, y_train, facecolor="none", edgecolor='#e4007f', s=50, label="train data") # plt.scatter(X_test, y_test, facecolor="none", edgecolor="r", s=50, label="test data") plt.plot(X_underlying, y_underlying, c='#000000', label=r"$\sin(2\pi x)$") plt.legend(fontsize='x-large') plt.savefig('ml-vis2.pdf') plt.show()

我們對數(shù)據(jù)可視化,畫出標(biāo)準(zhǔn)的sinx圖,然后將訓(xùn)練樣本可視化,從而確定數(shù)據(jù)點(diǎn)在標(biāo)準(zhǔn)線上下波動:

1.2、模型構(gòu)建

我們實(shí)現(xiàn)多項(xiàng)式基函數(shù)polynomial_basis_function對原始特征x進(jìn)行轉(zhuǎn)換。
多項(xiàng)式回歸如下:

我們建立如下函數(shù)來實(shí)現(xiàn)上式:
我們首先建立輸入序列的多項(xiàng)式轉(zhuǎn)化:

# 多項(xiàng)式轉(zhuǎn)換 def polynomial_basis_function(x, degree=2):"""輸入:- x: tensor, 輸入的數(shù)據(jù),shape=[N,1]- degree: int, 多項(xiàng)式的階數(shù)example Input: [[2], [3], [4]], degree=2example Output: [[2^1, 2^2], [3^1, 3^2], [4^1, 4^2]]注意:本案例中,在degree>=1時不生成全為1的一列數(shù)據(jù);degree為0時生成形狀與輸入相同,全1的Tensor輸出:- x_result: tensor"""if degree == 0:return torch.ones(size=x.shape, dtype=torch.float32)x_tmp = xx_result = x_tmpfor i in range(2, degree + 1):x_tmp = torch.multiply(x_tmp, x) # 逐元素相乘x_result = torch.cat((x_result, x_tmp), dim=-1)return x_result# 簡單測試 data = [[2], [3], [4]] X = torch.tensor(data=data, dtype=torch.float32) degree = 3 transformed_X = polynomial_basis_function(X, degree=degree) print("轉(zhuǎn)換前:", X) print("階數(shù)為", degree, "轉(zhuǎn)換后:", transformed_X)

轉(zhuǎn)化結(jié)果圖:

1.5、模型訓(xùn)練

轉(zhuǎn)化后的多項(xiàng)式,即變成了一特征屬性,我們可以采用線性回歸的方式來進(jìn)行訓(xùn)練。

plt.rcParams['figure.figsize'] = (12.0, 8.0)for i, degree in enumerate([0, 1, 3, 8]): # []中為多項(xiàng)式的階數(shù)model = Linear(degree)X_train_transformed = polynomial_basis_function(X_train.reshape([-1, 1]), degree)X_underlying_transformed = polynomial_basis_function(X_underlying.reshape([-1, 1]), degree)model = optimizer_lsm(model, X_train_transformed, y_train.reshape([-1, 1])) # 擬合得到參數(shù)y_underlying_pred = model(X_underlying_transformed).squeeze()print(model.params)# 繪制圖像plt.subplot(2, 2, i + 1)plt.scatter(X_train, y_train, facecolor="none", edgecolor='#e4007f', s=50, label="train data")plt.plot(X_underlying, y_underlying, c='#000000', label=r"$\sin(2\pi x)$")plt.plot(X_underlying, y_underlying_pred, c='#f19ec2', label="predicted function")plt.ylim(-2, 1.5)plt.annotate("M={}".format(degree), xy=(0.95, -1.4))# plt.legend(bbox_to_anchor=(1.05, 0.64), loc=2, borderaxespad=0.) plt.legend(loc='lower left', fontsize='x-large') plt.savefig('ml-vis3.pdf') plt.show()

1.6、模型評估

通過均方誤差來衡量訓(xùn)練誤差、測試誤差以及在沒有噪音的加入下sin函數(shù)值與多項(xiàng)式回歸值之間的誤差,更加真實(shí)地反映擬合結(jié)果。多項(xiàng)式分布階數(shù)從0到8進(jìn)行遍歷。

# 訓(xùn)練誤差和測試誤差 training_errors = [] test_errors = [] distribution_errors = []# 遍歷多項(xiàng)式階數(shù) for i in range(9):model = Linear(i)X_train_transformed = polynomial_basis_function(X_train.reshape([-1, 1]), i)X_test_transformed = polynomial_basis_function(X_test.reshape([-1, 1]), i)X_underlying_transformed = polynomial_basis_function(X_underlying.reshape([-1, 1]), i)optimizer_lsm(model, X_train_transformed, y_train.reshape([-1, 1]))y_train_pred = model(X_train_transformed).squeeze()y_test_pred = model(X_test_transformed).squeeze()y_underlying_pred = model(X_underlying_transformed).squeeze()train_mse = mean_squared_error(y_train, y_train_pred).item()training_errors.append(train_mse)test_mse = mean_squared_error(y_test, y_test_pred).item()test_errors.append(test_mse)# distribution_mse = mean_squared_error(y_true=y_underlying, y_pred=y_underlying_pred).item()# distribution_errors.append(distribution_mse)print("train errors: \n", training_errors) print("test errors: \n", test_errors) # print ("distribution errors: \n", distribution_errors)# 繪制圖片 plt.rcParams['figure.figsize'] = (8.0, 6.0) plt.plot(training_errors, '-.', mfc="none", mec='#e4007f', ms=10, c='#e4007f', label="Training") plt.plot(test_errors, '--', mfc="none", mec='#f19ec2', ms=10, c='#f19ec2', label="Test") # plt.plot(distribution_errors, '-', mfc="none", mec="#3D3D3F", ms=10, c="#3D3D3F", label="Distribution") plt.legend(fontsize='x-large') plt.xlabel("degree") plt.ylabel("MSE") plt.savefig('ml-mse-error.pdf') plt.show()

評估結(jié)果:

通過觀察可視化結(jié)果,我們可以得到:

  • 當(dāng)階數(shù)較低的時候,模型的表示能力有限,訓(xùn)練誤差和測試誤差都很高,代表模型欠擬合
  • 當(dāng)階數(shù)較高的時候,模型表示能力強(qiáng),但將訓(xùn)練數(shù)據(jù)中的噪聲也作為特征進(jìn)行學(xué)習(xí),一般情況下訓(xùn)練誤差繼續(xù)降低而測試誤差顯著升高,代表模型過擬合。
  • 對于模型過擬合的情況,可以引入正則化方法,通過向誤差函數(shù)中添加一個懲罰項(xiàng)來避免系數(shù)傾向于較大的取值。
    代碼如下:

    degree = 8 # 多項(xiàng)式階數(shù) reg_lambda = 0.0001 # 正則化系數(shù)X_train_transformed = polynomial_basis_function(X_train.reshape([-1,1]), degree) X_test_transformed = polynomial_basis_function(X_test.reshape([-1,1]), degree) X_underlying_transformed = polynomial_basis_function(X_underlying.reshape([-1,1]), degree)model = Linear(degree)optimizer_lsm(model,X_train_transformed,y_train.reshape([-1,1]))y_test_pred=model(X_test_transformed).squeeze() y_underlying_pred=model(X_underlying_transformed).squeeze()model_reg = Linear(degree)optimizer_lsm(model_reg,X_train_transformed,y_train.reshape([-1,1]),reg_lambda=reg_lambda)y_test_pred_reg=model_reg(X_test_transformed).squeeze() y_underlying_pred_reg=model_reg(X_underlying_transformed).squeeze()mse = mean_squared_error(y_test, y_test_pred).item() print("mse:",mse) mes_reg = mean_squared_error(y_test, y_test_pred_reg).item() print("mse_with_l2_reg:",mes_reg)# 繪制圖像 plt.scatter(X_train, y_train, facecolor="none", edgecolor="#e4007f", s=50, label="train data") plt.plot(X_underlying, y_underlying, c='#000000', label=r"$\sin(2\pi x)$") plt.plot(X_underlying, y_underlying_pred, c='#e4007f', linestyle="--", label="$deg. = 8$") plt.plot(X_underlying, y_underlying_pred_reg, c='#f19ec2', linestyle="-.", label="$deg. = 8, \ell_2 reg$") plt.ylim(-1.5, 1.5) plt.annotate("lambda={}".format(reg_lambda), xy=(0.82, -1.4)) plt.legend(fontsize='large') plt.savefig('ml-vis4.pdf') plt.show()

    評估結(jié)果:

    三、嘗試封裝Runner類

    Runner類的成員函數(shù)定義如下:

    • __init__函數(shù):實(shí)例化Runner類,需要傳入模型、損失函數(shù)、優(yōu)化器和評價(jià)指標(biāo)等;
    • train函數(shù):模型訓(xùn)練,指定模型訓(xùn)練需要的訓(xùn)練集和驗(yàn)證集;
    • evaluate函數(shù):通過對訓(xùn)練好的模型進(jìn)行評價(jià),在驗(yàn)證集或測試集上查看模型訓(xùn)練效果;
    • predict函數(shù):選取一條數(shù)據(jù)對訓(xùn)練好的模型進(jìn)行預(yù)測;
    • save_model函數(shù):模型在訓(xùn)練過程和訓(xùn)練結(jié)束后需要進(jìn)行保存;
    • load_model函數(shù):調(diào)用加載之前保存的模型。
      包裝Runner類示意圖:

    包裝后的Runner類:

    class Runner():def __init__(self,model,model_loss,model_optimizer,model_evaluate):self.model = modelself.model_loss = model_lossself.model_optimizer = model_optimizerself.model_evaluate = model_evaluatedef train(self,Train_feature,Test_feature,**kwargs):self.Train_feature = Train_featurepassreturn #各個參數(shù)def evaluate(self,label,**kwargs):loss = self.model_loss(label,self.predict(self.Train_feature))# accuracy =passreturn #返回精度和誤差def predict(self,X,**kwargs):#用train 的各個參數(shù)來對輸入序列X進(jìn)行預(yù)測,返回預(yù)測值passreturn #返回預(yù)測值def save_model(self,save_path):passdef load_model(self,model_path):pass

    四、基于線性回歸的波士頓房價(jià)預(yù)測

    4.1數(shù)據(jù)集介紹


    預(yù)覽一下我們的數(shù)據(jù)集的前五條數(shù)據(jù),看看有沒有問題。

    import pandas as pd # 開源數(shù)據(jù)分析和操作工具# 利用pandas加載波士頓房價(jià)的數(shù)據(jù)集 data=pd.read_csv("C:\\FileRecvboston_house_prices.csv") # 預(yù)覽前5行數(shù)據(jù) data.head()

    預(yù)覽圖:

    4.2數(shù)據(jù)清洗

    4.2.1缺失值分析

    用isna().sum()各個屬性的統(tǒng)計(jì)缺失值個數(shù)。

    data.isna().sum()

    分析下圖,說明此數(shù)據(jù)集不存在數(shù)據(jù)缺失的情況。

    4.2.2異常值處理

    通過箱線圖直觀的顯示數(shù)據(jù)分布,并觀測數(shù)據(jù)中的異常值。箱線圖一般由五個統(tǒng)計(jì)值組成:最大值、上四分位、中位數(shù)、下四分位和最小值。一般來說,觀測到的數(shù)據(jù)大于最大估計(jì)值或者小于最小估計(jì)值則判斷為異常值,其中:

    箱線圖介紹:

    查看數(shù)據(jù)集各個屬性的異常值并可視化的代碼:

    import matplotlib.pyplot as plt # 可視化工具 import pandas as pd # 開源數(shù)據(jù)分析和操作工具# 利用pandas加載波士頓房價(jià)的數(shù)據(jù)集 data=pd.read_csv("C:\\boston_house_prices.csv") # 預(yù)覽前5行數(shù)據(jù) data.head() # 查看各字段缺失值統(tǒng)計(jì)情況 data.isna().sum() # 箱線圖查看異常值分布 def boxplot(data, fig_name):# 繪制每個屬性的箱線圖data_col = list(data.columns)# 連續(xù)畫幾個圖片plt.figure(figsize=(5, 5), dpi=300)# 子圖調(diào)整plt.subplots_adjust(wspace=0.6)# 每個特征畫一個箱線圖for i, col_name in enumerate(data_col):plt.subplot(3, 5, i + 1)# 畫箱線圖plt.boxplot(data[col_name],showmeans=True,meanprops={"markersize": 1, "marker": "D", "markeredgecolor": "#C54680"}, # 均值的屬性medianprops={"color": "#946279"}, # 中位數(shù)線的屬性whiskerprops={"color": "#8E004D", "linewidth": 0.4, 'linestyle': "--"},flierprops={"markersize": 0.4},)# 圖名plt.title(col_name, fontdict={"size": 5}, pad=2)# y方向刻度plt.yticks(fontsize=4, rotation=90)plt.tick_params(pad=0.5)# x方向刻度plt.xticks([])plt.savefig(fig_name)plt.show()boxplot(data, 'ml-vis5.pdf')

    可視化結(jié)果:

    由圖可以直觀的看出,數(shù)據(jù)中存在很多的異常值,即超出上下兩條杠的部分中的黑圓圈,我們將這些異常值認(rèn)為是數(shù)據(jù)集中的“噪聲”,并將臨界值取代噪聲點(diǎn),從而完成對數(shù)據(jù)集異常值的處理。
    替換代碼:

    # 四分位處理異常值 num_features = data.select_dtypes(exclude=['object', 'bool']).columns.tolist()for feature in num_features:if feature == 'CHAS':continueQ1 = data[feature].quantile(q=0.25) # 下四分位Q3 = data[feature].quantile(q=0.75) # 上四分位IQR = Q3 - Q1top = Q3 + 1.5 * IQR # 最大估計(jì)值bot = Q1 - 1.5 * IQR # 最小估計(jì)值values = data[feature].valuesvalues[values > top] = top # 臨界值取代噪聲values[values < bot] = bot # 臨界值取代噪聲data[feature] = values.astype(data[feature].dtypes)# 再次查看箱線圖,異常值已被臨界值替換(數(shù)據(jù)量較多或本身異常值較少時,箱線圖展示會不容易體現(xiàn)出來) boxplot(data, 'ml-vis6.pdf')

    取代后的箱線圖:

    4.3數(shù)據(jù)集的劃分

    將數(shù)據(jù)集劃分為兩份:訓(xùn)練集和測試集,不包括驗(yàn)證集。
    使用下邊的代碼進(jìn)行劃分:

    import torchtorch.manual_seed(10)# 劃分訓(xùn)練集和測試集 def train_test_split(X, y, train_percent=0.8):n = len(X)shuffled_indices = torch.randperm(n) # 返回一個數(shù)值在0到n-1、隨機(jī)排列的1-D Tensortrain_set_size = int(n * train_percent)train_indices = shuffled_indices[:train_set_size]test_indices = shuffled_indices[train_set_size:]X = X.valuesy = y.valuesX_train = X[train_indices]y_train = y[train_indices]X_test = X[test_indices]y_test = y[test_indices]return X_train, X_test, y_train, y_testX = data.drop(['MEDV'], axis=1) y = data['MEDV']X_train, X_test, y_train, y_test = train_test_split(X, y) # X_train每一行是個樣本,shape[N,D]

    4.4特征工程

    為了消除綱量對數(shù)據(jù)特征之間影響,在模型訓(xùn)練前,需要對特征數(shù)據(jù)進(jìn)行歸一化處理,將數(shù)據(jù)縮放到[0, 1]區(qū)間內(nèi),使得不同特征之間具有可比性。

    import torchX_train = torch.tensor(X_train,dtype=torch.float32) X_test = torch.tensor(X_test,dtype=torch.float32) y_train = torch.tensor(y_train,dtype=torch.float32) y_test = torch.tensor(y_test,dtype=torch.float32) X_min = torch.min(X_train,dim=0) X_max = torch.max(X_train,dim=0) X_train = (X_train-X_min.values)/(X_max.values - X_min.values)X_test = (X_test-X_min.values)/(X_max.values - X_min.values)# 訓(xùn)練集構(gòu)造 train_dataset=(X_train,y_train) # 測試集構(gòu)造 test_dataset=(X_test,y_test)

    4.5模型構(gòu)建

    首先,實(shí)例化一個對象。
    關(guān)于nndl,我們可以不用這個包,可以用我們上邊自己寫的Linear類,從而進(jìn)行一樣的操作,也能得到結(jié)果。

    from nndl.op import Linear# 模型實(shí)例化 input_size = 12 model=Linear(input_size)

    4.6完善Runner類

    我們將之前只有一個外殼的Runner類補(bǔ)充,首先:

    import torch.nn as nn mse_loss = nn.MSELoss()

    完整實(shí)現(xiàn)如下:

    import torch.nn as nn import torch import os from nndl.op import Linear from nndl.opitimizer import optimizer_lsm # 模型實(shí)例化 input_size = 12 model=Linear(input_size) mse_loss = nn.MSELoss()class Runner(object):def __init__(self, model, optimizer, loss_fn, metric):# 優(yōu)化器和損失函數(shù)為None,不再關(guān)注# 模型self.model = model# 評估指標(biāo)self.metric = metric# 優(yōu)化器self.optimizer = optimizerdef train(self, dataset, reg_lambda, model_dir):X, y = datasetself.optimizer(self.model, X, y, reg_lambda)# 保存模型self.save_model(model_dir)def evaluate(self, dataset, **kwargs):X, y = datasety_pred = self.model(X)result = self.metric(y_pred, y)return resultdef predict(self, X, **kwargs):return self.model(X)def save_model(self, model_dir):if not os.path.exists(model_dir):os.makedirs(model_dir)params_saved_path = os.path.join(model_dir, 'params.pdtensor')torch.save(model.params, params_saved_path)def load_model(self, model_dir):params_saved_path = os.path.join(model_dir, 'params.pdtensor')self.model.params = torch.load(params_saved_path)optimizer = optimizer_lsm runner = Runner(model, optimizer=optimizer,loss_fn=None, metric=mse_loss)

    4.7模型訓(xùn)練

    訓(xùn)練代碼:

    optimizer = optimizer_lsm runner = Runner(model, optimizer=optimizer,loss_fn=None, metric=mse_loss)# 模型保存文件夾 saved_dir = 'D:/models_'# 啟動訓(xùn)練 runner.train(train_dataset,reg_lambda=0,model_dir=saved_dir) columns_list = data.columns.to_list() weights = runner.model.params['w'].tolist() b = runner.model.params['b'].item()for i in range(len(weights)):print(columns_list[i],"weight:",weights[i])print("b:",b)

    訓(xùn)練結(jié)果:

    加載訓(xùn)練好的模型參數(shù),在測試集上得到模型的MSE指標(biāo)。

    # 加載模型權(quán)重 runner.load_model(saved_dir)mse = runner.evaluate(test_dataset) print('MSE:', mse.item())

    4.8 模型預(yù)測

    預(yù)測代碼

    runner.load_model(saved_dir) pred = runner.predict(X_test[:1]) print("真實(shí)房價(jià):",y_test[:1].item()) print("預(yù)測的房價(jià):",pred.item())

    預(yù)測結(jié)果:
    從輸出結(jié)果看,預(yù)測房價(jià)接近真實(shí)房價(jià)。


    后話:一些問題

    • 問題1:使用類實(shí)現(xiàn)機(jī)器學(xué)習(xí)模型的基本要素有什么優(yōu)點(diǎn)?
      解: 我自我感覺使用類實(shí)現(xiàn)機(jī)器學(xué)習(xí)模型的基本要素,可以讓我們以后對任何一個適用于該樣本的數(shù)據(jù)集能夠以更簡單的形式進(jìn)行訓(xùn)練,優(yōu)化了后續(xù)的訓(xùn)練代碼,并且以類封裝函數(shù)可以讓整體更加清晰,思路更加清楚,同時對于機(jī)器學(xué)習(xí)模型的整體把握也會好很多。
    • 問題2:算子op、優(yōu)化器opitimizer放在單獨(dú)的文件中,主程序在使用時調(diào)用該文件。這樣做有什么優(yōu)點(diǎn)?
      解: 能夠簡化操作,直接使用import引用文件,不需要再重新寫這些算子和優(yōu)化器,從而不需要再進(jìn)行更多的代碼編寫,省時省力。
    • 問題3:線性回歸通常使用平方損失函數(shù),能否使用交叉熵?fù)p失函數(shù)?為什么?
      解: 如果要問為什么線性回歸要使用均方誤差,可以參考這篇博客:【線性回歸:為什么損失函數(shù)要使用均方誤差】,交叉熵?fù)p失的假設(shè)是誤差分布是二值分布,因此更適用于分類等離散屬性的問題,而均方誤差則假設(shè)數(shù)據(jù)的分布是正態(tài)分布,更加是用于連續(xù)屬性的誤差分析。
      參考以下博客:
      NNDL 實(shí)驗(yàn)三 線性回歸
      神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí):案例與實(shí)踐
      平方損失函數(shù)與交叉熵?fù)p失函數(shù) & 回歸問題為何不使用交叉熵?fù)p失函數(shù)

    總結(jié)

    以上是生活随笔為你收集整理的【线性回归——从简单构建到实现数据预测】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    欧美一性一交一乱 | 亚洲免费高清视频 | 黄色三级在线 | 右手影院亚洲欧美 | 亚洲精品久久久久久国 | 久久免费视频网站 | 国产免费嫩草影院 | 久久免费激情视频 | 久久久久国 | 波多野结衣在线观看一区二区三区 | 在线观看黄色免费视频 | 六月激情久久 | 国产精品久久久久av福利动漫 | 天天做天天爱天天爽综合网 | 久久综合之合合综合久久 | 视频在线观看入口黄最新永久免费国产 | 五月婷婷久久丁香 | 亚洲午夜久久久久久久久久久 | www.天天干.com | 18av在线视频| 国产成人免费观看 | 中文字幕精品久久 | 911国产| 91在线观看视频网站 | 久久看片网 | 成人久久久久久久久久 | 亚洲最大免费成人网 | 国产91丝袜在线播放动漫 | 欧美一区二区三区在线播放 | 狠狠操欧美 | 久久免费av | 天天干天天草天天爽 | 午夜久久久影院 | 奇米四色影狠狠爱7777 | 黄色一级在线视频 | 综合色在线 | av电影在线免费观看 | 丁香九月婷婷 | 日本在线中文在线 | 天天干天天做 | 视频一区久久 | 99中文字幕在线观看 | 亚州激情视频 | 亚洲精品在线观看不卡 | 久久久私人影院 | 黄色av播放 | 精品999在线观看 | 国产精品永久免费视频 | 日韩免费观看一区二区三区 | 97色se| 超碰精品在线 | 成人午夜剧场在线观看 | 在线观看黄网 | 国内精品免费久久影院 | 国产亚洲精品久久久久久 | 中文字幕在线免费 | 日韩91av | 91看片成人 | 国内精品久久久久久中文字幕 | 亚洲无吗视频在线 | 久久成人资源 | 4438全国亚洲精品观看视频 | 91麻豆精品国产91久久久无限制版 | 免费福利影院 | 麻豆国产在线视频 | 色久av| 国产精品18久久久久久vr | 久久久久国产精品午夜一区 | 国产精品日韩高清 | 国产精品 999 | 91色九色| www.五月天婷婷.com | 欧美大片www | 国产精品久久久久久久久久久久冷 | 97在线视频网站 | 欧美 日韩 国产 成人 在线 | 国产视频亚洲 | 国产精品一区二区在线观看 | 国产欧美久久久精品影院 | 亚洲精品字幕在线观看 | 高清av网站 | 久青草电影 | 中文字幕乱码一区二区 | 在线播放 日韩专区 | 在线观看亚洲视频 | 91人人澡| 久久久人人爽 | a色视频| 午夜精选视频 | 天天操天天操天天操天天 | 成年人免费观看在线视频 | 久久成电影 | 婷婷久久久久 | 国产精品精品 | 欧美激情综合网 | 在线观看理论 | 久久综合狠狠综合久久激情 | 天天操综合网站 | 国产在线观看网站 | 在线免费观看羞羞视频 | www黄在线 | 欧美色图亚洲图片 | 欧美一级久久久久 | 涩涩爱夜夜爱 | 久久99久久99精品免视看婷婷 | 国产成人精品一区二区三区网站观看 | 免费成人黄色片 | 国产在线视频在线观看 | 日韩在线视频观看免费 | 久久免费av电影 | 日本久久精品视频 | 久久超级碰| 亚洲天堂网视频在线观看 | 中文视频在线播放 | 99爱在线| 六月丁香激情综合 | 国产精品综合在线 | 69国产盗摄一区二区三区五区 | 日本女人逼 | 亚洲成人高清在线 | 少妇视频一区 | 天天插天天狠天天透 | 人人涩 | 天天综合网久久 | 一区二区三区日韩精品 | 97视频免费在线观看 | 成年人在线看片 | 黄色免费高清视频 | 在线av资源 | 久久资源在线 | 国产亚洲综合性久久久影院 | 久久久黄色av | 久久成人一区 | 国产 日韩 欧美 自拍 | 日韩午夜精品 | 日日操天天操夜夜操 | 国产日产精品一区二区三区四区的观看方式 | 一区二区三区视频在线 | 美女久久99| 久久综合干 | 久久99国产精品久久99 | 干干干操操操 | 婷婷五月情| 久久久999免费视频 日韩网站在线 | 在线黄频 | 久久成人福利 | 欧美伦理一区二区 | 亚洲电影网站 | 亚洲欧美综合 | 欧美,日韩| 色综合天天视频在线观看 | 亚洲爽爽网| 亚洲综合在线播放 | 麻豆国产精品永久免费视频 | 日韩超碰 | 99久久精品免费看 | 国产不卡在线观看视频 | 9999在线视频 | 久久情爱 | 国产极品尤物在线 | 国产无限资源在线观看 | 久久免费在线观看 | 日日干,天天干 | 日韩激情网 | 精品你懂的| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲精品乱码久久久久久9色 | 网站在线观看日韩 | av日韩在线网站 | 日韩精品91偷拍在线观看 | 夜夜婷婷| 在线观看亚洲电影 | 久操伊人 | 亚洲激色 | 欧美一二区视频 | 九九热在线观看 | 国产 日韩 欧美 在线 | 国产精品男女 | 在线导航av | 国产一级在线免费观看 | 99久久er热在这里只有精品66 | 亚洲精品白浆高清久久久久久 | 亚洲黄色区 | 中文字幕在线观看视频一区 | 国产清纯在线 | 久久草视频 | 国产亚洲高清视频 | av电影亚洲 | 国产精品综合久久久久 | 国产91对白在线 | 成人动漫视频在线 | 久久夜色精品国产欧美乱极品 | 一区二区三区免费在线观看视频 | 色狠狠操 | 精品999| 国产精品欧美日韩在线观看 | 99福利影院| 九九热99视频 | 亚洲精品字幕在线观看 | 蜜桃视频在线视频 | 毛片网免费 | 亚洲人人av| 五月天九九 | 免费国产一区二区视频 | 在线视频欧美亚洲 | 国产在线色 | 久久草视频 | 日韩影视大全 | 久草电影在线 | 成人黄色在线看 | 久久久999精品视频 国产美女免费观看 | 国产高清绿奴videos | 亚洲精品久久久久999中文字幕 | 欧美性超爽 | 2018好看的中文在线观看 | 99国产免费网址 | 免费成人黄色av | 可以免费看av | 国产精品中文字幕av | 高清久久久久久 | 香蕉视频在线视频 | 久久综合欧美精品亚洲一区 | 久久天天操 | 91av观看 | 日韩高清在线不卡 | 激情欧美网 | 久久在线观看 | 精品久久久久久综合 | 国产成人在线网站 | 国产专区在线播放 | 国产在线97 | 国产精品理论片在线观看 | 涩涩伊人| 天天天综合 | 欧美精品三级在线观看 | 久久在线视频精品 | 一区二区三区日韩在线观看 | www.黄色在线 | 成人黄色电影在线 | 激情影音先锋 | 久久久国产成人 | 91麻豆精品国产自产在线游戏 | 久久精品视频18 | 国产女人18毛片水真多18精品 | 久久国产精品色av免费看 | 欧美日韩国产三级 | 中文字幕资源网在线观看 | 一级黄色大片在线观看 | 日韩欧美大片免费观看 | 93久久精品日日躁夜夜躁欧美 | 国产精品 中文字幕 亚洲 欧美 | 一区二区三区免费播放 | 欧美一区二区三区四区夜夜大片 | 精品一区 在线 | 丁香花在线视频观看免费 | 国产精品久久久免费 | 久要激情网 | avsex| 欧美日韩在线观看一区 | 99视频在线精品国自产拍免费观看 | 久久久久久久久久久电影 | 插婷婷| 久久午夜网| 国产成人精品一区二区三区网站观看 | 免费一级片在线观看 | 五月天色站 | 久久激情综合网 | 天堂网一区二区 | 久久久久久看片 | 揉bbb玩bbb少妇bbb | 麻豆 91 在线 | 热久久国产 | 丁香婷婷色综合亚洲电影 | 国产精品91一区 | 日韩v在线 | 日韩在线免费高清视频 | 国产成人精品午夜在线播放 | 亚洲日本一区二区在线 | 嫩模bbw搡bbbb搡bbbb | 国产亚州av | 99在线视频免费观看 | 日韩精品一二三 | 亚洲人久久久 | 亚州精品在线视频 | 久久在线观看视频 | 二区三区视频 | 久久视频国产 | 国产午夜麻豆影院在线观看 | 最新国产在线视频 | 四虎国产精品成人免费影视 | 天天射射天天 | 国产精品久久久久久久久久久久久久 | 在线视频你懂 | 在线国产一区二区三区 | 精品国产色 | 一区二区三区韩国免费中文网站 | 国产在线一卡 | 日韩欧美高清免费 | 九九九热精品免费视频观看网站 | 激情欧美xxxx| 日韩久久午夜一级啪啪 | 成年人黄色免费视频 | 在线观看亚洲专区 | 国际av在线| 日韩最新av在线 | 色全色在线资源网 | 亚洲黄色免费电影 | av成人在线电影 | 国产小视频国产精品 | 久久人人爽人人片av | 99久久久久成人国产免费 | 中文字幕一区二区三区在线观看 | 国产精品一区二区三区电影 | 婷婷丁香导航 | 在线观看一二三区 | 日韩欧美在线中文字幕 | 丝袜美女视频网站 | 能在线看的av | 香蕉在线视频播放网站 | 九九久久久 | 久久在线看 | 99色在线观看视频 | 久久综合给合久久狠狠色 | 国产成人免费观看久久久 | 免费三级a | 亚洲一区日韩精品 | 激情av网址| 欧美另类69 | 欧美成人999 | 国产在线 一区二区三区 | 日日碰狠狠添天天爽超碰97久久 | 天天干天天拍天天操 | 日韩免费在线视频 | 日本中文字幕在线看 | 欧美精品一区二区蜜臀亚洲 | 日日干视频 | 91精品在线免费观看视频 | 欧美一二三区播放 | av不卡在线看 | 欧美激情精品久久久久久免费印度 | 国产精品网红直播 | 国产精品一区二区白浆 | 国产一区网址 | 超碰在线人人艹 | 国产视频手机在线 | av电影一区二区三区 | 久久综合五月天婷婷伊人 | 久草视频中文 | 日韩电影一区二区三区 | 91精品久久久久久综合五月天 | 天天操狠狠干 | 天天操天天干天天干 | 欧美综合久久 | 国产资源站 | 国产精品综合久久久 | 一级黄色大片在线观看 | 激情婷婷综合网 | 欧洲视频一区 | 日韩精品在线免费播放 | a级片韩国 | 国产在线国偷精品产拍 | 亚洲 精品在线视频 | 国产69久久久欧美一级 | 碰天天操天天 | 91九色porny蝌蚪视频 | 国产剧情av在线播放 | 在线观看免费中文字幕 | 天天天天综合 | 五月天激情开心 | 毛片久久久 | 国产精品久免费的黄网站 | 国产精品久久久999 国产91九色视频 | 综合激情婷婷 | 免费av片在线 | 黄色毛片一级片 | 日免费视频 | 911久久| 免费观看www视频 | 日韩中文字幕免费视频 | 日本中文字幕视频 | 欧美日韩性视频在线 | 亚洲成年人在线播放 | 久久婷婷精品视频 | 亚洲精品午夜国产va久久成人 | 黄色一级免费电影 | 国产一区二区在线免费播放 | 国产精品一区二区三区视频免费 | 日韩电影中文字幕在线观看 | 亚洲精品久久久蜜臀下载官网 | 国产免费一区二区三区最新6 | 欧美最猛性xxxxx免费 | 高潮久久久 | 久久久伦理 | 日韩aa视频| 日韩精品一区二区在线视频 | 国产91精品一区二区麻豆网站 | 亚洲精品福利在线 | 精品国产视频一区 | 中文字幕乱码视频 | 女人18精品一区二区三区 | 综合激情网... | 中文字幕av在线 | 丁香六月婷婷开心 | 性色av一区二区三区在线观看 | 97超碰人人澡人人爱学生 | 国产不卡av在线 | 国产精品久久久久久久毛片 | 99热精品久久 | 91女神的呻吟细腰翘臀美女 | 久久久精品视频成人 | 日韩av电影中文字幕 | 国产精品九九久久久久久久 | 24小时日本在线www免费的 | 99视频网站 | 蜜臀精品久久久久久蜜臀 | 亚洲高清在线观看视频 | 在线观看黄污 | 91成人在线观看喷潮 | 婷婷综合导航 | 国产日产亚洲精华av | 亚洲电影成人 | 国产精品久久久一区二区三区网站 | 国产手机免费视频 | 国产三级视频 | 啪嗒啪嗒免费观看完整版 | 久久久性| 韩日视频在线 | 一级一级一片免费 | 九七在线视频 | 成人中心免费视频 | 99c视频在线 | 日韩电影中文,亚洲精品乱码 | 亚洲v精品 | 国产精品短视频 | 米奇影视7777 | 国产精品自产拍在线观看网站 | 国产精品久久99综合免费观看尤物 | 夜夜躁天天躁很躁波 | 日韩高清免费电影 | 久久一级电影 | 久草在线免 | 在线a亚洲视频播放在线观看 | 人人看看人人 | 亚洲jizzjizz日本少妇 | 国内成人精品视频 | 国产精品久久久久久久午夜 | 国产情侣一区 | 日韩av电影国产 | 免费av观看网站 | 国产传媒中文字幕 | 9久久精品| 五月婷婷丁香在线观看 | 婷婷午夜天 | 毛片1000部免费看 | 五月天激情婷婷 | 日本在线观看中文字幕 | 91视频下载 | 国产日韩欧美在线 | 免费a视频 | 成人免费网视频 | 少妇自拍av | 国产一区二区网址 | 91成人精品一区在线播放 | 91在线影院 | 成人黄色大片 | 五月婷婷激情综合 | 国产小视频国产精品 | 一级精品视频在线观看宜春院 | 九九色在线观看 | 久久久精品一区二区 | 国产精品每日更新 | 国产精品国内免费一区二区三区 | 久久99久久99精品免费看小说 | 九九热只有这里有精品 | 国产免费片| 91福利试看 | 亚洲欧美成人在线 | 成人国产精品久久久 | 欧美精品亚洲精品 | 欧美精品久久久久久久久久久 | 午夜三级影院 | av免费试看 | 91成人网页版 | 亚洲精品资源 | 香蕉精品在线观看 | 午夜精品一二三区 | 国产色资源| 日韩美在线观看 | 国产特级毛片aaaaaa毛片 | 黄a在线看 | 国产在线国偷精品产拍免费yy | 国产一区二区在线影院 | 亚洲日本一区二区在线 | 91九色国产蝌蚪 | 99精品99 | 在线国产激情视频 | 国产字幕在线观看 | 日韩福利在线观看 | 五月丁香 | 日韩高清在线一区二区三区 | 国产精品嫩草影院99网站 | 亚洲激情六月 | 波多野结衣小视频 | 毛片永久新网址首页 | 国内三级在线 | 国产999视频在线观看 | 日韩一区二区三区高清免费看看 | 精品96久久久久久中文字幕无 | 婷婷在线免费 | 亚洲自拍偷拍色图 | 精品国产一区二区久久 | 国产精品免费久久久久影院仙踪林 | 国产精品ssss在线亚洲 | 亚洲激情综合网 | 久久人人爽人人爽人人片av软件 | www.夜夜草| 欧洲高潮三级做爰 | 丁香久久综合 | 99久久日韩精品视频免费在线观看 | 欧美日韩久 | 成人网在线免费视频 | 91精品推荐 | 在线观看日本高清mv视频 | 国产91九色视频 | 色综合天天天天做夜夜夜夜做 | 日本在线视频一区二区三区 | 黄a网站| 天天做综合网 | 九九av | 狠狠色丁香久久婷婷综合五月 | 免费国产在线视频 | 欧美成人播放 | 九九久久影院 | 天天干天天射天天插 | 免费在线| 成人午夜剧场在线观看 | 西西www4444大胆视频 | 免费日韩一区二区三区 | 九九免费在线观看 | 色综合网在线 | 日韩欧美网址 | 日韩免费一级a毛片在线播放一级 | 91九色综合 | 国产精品18p | 欧美精品久久久久久久亚洲调教 | 精品欧美日韩 | 99av在线视频| 国产99色| 亚洲天堂毛片 | 国产美女主播精品一区二区三区 | 99国产情侣在线播放 | 欧美日韩高清一区二区三区 | 黄色午夜网站 | 9ⅰ精品久久久久久久久中文字幕 | 色在线视频 | 久久人人爽人人片 | 黄色毛片电影 | 丝袜美腿在线 | 国产中的精品av小宝探花 | 日韩电影在线看 | 国产一级在线看 | 精品一区二区日韩 | 91自拍视频在线 | 国产精品色在线 | www.色com| 在线网址你懂得 | 国产精品国产亚洲精品看不卡 | 日韩在线视频免费播放 | 国产精品亚洲视频 | 精品国产成人av在线免 | 黄色免费观看视频 | 婷婷免费在线视频 | 国产精品久久久久久久妇 | 综合激情久久 | 国产不卡一二三区 | 国产麻豆精品95视频 | 国产在线观看av | 一级黄色在线免费观看 | 99免费看片 | 五月激情久久 | 91九色在线观看视频 | 日本久久中文字幕 | 国产精品欧美日韩 | x99av成人免费 | 国产美女免费视频 | 午夜电影一区 | 中文字幕免费久久 | 在线精品视频免费播放 | 成人午夜电影久久影院 | 欧美9999| 久久久999免费视频 日韩网站在线 | 六月丁香在线视频 | 亚洲精品在线免费播放 | 人人干网站 | 99热这里精品 | av成人动漫| 成人久久免费 | 亚洲精品99久久久久中文字幕 | 九九热精品视频在线观看 | 激情丁香久久 | 国产手机视频精品 | 欧美日韩一区二区视频在线观看 | 亚洲精品乱码白浆高清久久久久久 | 亚洲伊人第一页 | 欧美国产一区在线 | 黄色三级在线 | 国产99自拍| 制服丝袜在线91 | 婷香五月| 久草在线视频资源 | 国产成人精品一区二区三区 | 91av在线免费播放 | 午夜国产福利在线 | 国产精品一区二区三区免费看 | 中文字幕观看在线 | 欧美成年人在线观看 | 成年人看片| 亚洲男男gⅴgay双龙 | 草久在线观看视频 | 精品免费久久久久 | av在线播放观看 | 一级黄色电影网站 | 日韩高清成人在线 | 久久午夜色播影院免费高清 | 亚洲视频专区在线 | 一区二区理论片 | 友田真希x88av | 欧美专区日韩专区 | 国产国产人免费人成免费视频 | 国产亚洲精品久久久久久电影 | 天天干天天操天天入 | 日本激情视频中文字幕 | 日韩欧美在线免费 | av片在线看 | 2017狠狠干 | 亚洲天天综合 | 久久久久亚洲国产 | 天堂av网在线 | 成人三级网址 | 欧美巨大荫蒂茸毛毛人妖 | 伊人六月 | 国产精品美女久久久久久久久 | 日本中文在线 | 国产黄在线 | 成人欧美一区二区三区黑人麻豆 | 97网在线观看| 国产精品18久久久久久不卡孕妇 | 在线看片日韩 | 午夜视频不卡 | 久久免费在线观看 | 91日本在线播放 | a极黄色片 | www在线免费观看 | 99re在线视频观看 | 国产在线97 | 免费在线国产 | 久久国产精品第一页 | 免费视频 你懂的 | 中文字幕一区二区三 | 探花视频网站 | 国产护士hd高朝护士1 | 婷婷精品国产欧美精品亚洲人人爽 | 激情网站免费观看 | 久久久久五月天 | 国产色一区 | 免费福利在线观看 | av天天色 | 色狠狠操 | 国产男女免费完整视频 | 五月天婷婷丁香花 | 在线免费亚洲 | 中文字幕乱码在线播放 | 精品一区二区综合 | 日日夜夜综合 | 成人午夜影院在线观看 | 国产福利91精品一区 | 福利视频导航网址 | 99久久精品费精品 | 91九色porny蝌蚪主页 | 免费看国产黄色 | 国产精品福利午夜在线观看 | 88av色| 久久久久欠精品国产毛片国产毛生 | 久久爱综合 | 美女一区网站 | 国产九色在线播放九色 | 日韩精品视频免费看 | 天天操偷偷干 | 欧美91精品久久久久国产性生爱 | 国产黄色美女 | 国产 日韩 欧美 自拍 | 一级片观看 | 91探花在线 | 狠狠88综合久久久久综合网 | 婷婷夜夜 | 99re视频在线观看 | 日本精油按摩3 | 亚洲国产高清在线观看视频 | 天天操网址 | 国产无套精品久久久久久 | 成人av免费在线观看 | 最近日本中文字幕a | 中文字幕在线免费97 | 午夜久久久影院 | 中国一级片在线播放 | 亚洲韩国一区二区三区 | 国产一级黄色片免费看 | 欧美成人一二区 | 国产精品99久久久久久久久 | 曰韩精品| 天天做夜夜做 | 午夜性福利 | 日韩大陆欧美高清视频区 | 中文字幕视频三区 | 国内久久久久 | 中文字幕亚洲欧美日韩2019 | 日韩福利在线观看 | 久久优 | 久久夜av| 四虎影视成人 | 国产日产精品久久久久快鸭 | 欧美日韩二三区 | 99免费看片 | 日韩欧美一区二区三区视频 | 欧美国产日韩在线视频 | 国产精品久久久久久久久费观看 | 国产不卡在线播放 | 成人在线播放免费观看 | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产日韩在线一区 | 国产精品福利在线 | 69国产成人综合久久精品欧美 | 欧美精品v国产精品v日韩精品 | 成人蜜桃网 | 国产精品99久久久精品免费观看 | 久久亚洲成人网 | 国产精品免费在线观看视频 | 日韩另类在线 | 亚洲精选99 | 免费成人在线电影 | 国产美女久久久 | 久久午夜免费观看 | 国产精品中文字幕在线 | 久草电影在线观看 | 欧美激情视频在线免费观看 | 国产在线永久 | 精品国产1区2区3区 国产欧美精品在线观看 | 六月色丁香 | 亚洲视频国产 | 精品一区二区在线看 | 9999在线| 在线观看免费高清视频大全追剧 | 成人污视频在线观看 | 欧美不卡在线 | 五月婷婷狠狠 | 欧美日韩三级在线观看 | 中文字幕a∨在线乱码免费看 | 国产精品手机在线观看 | 久久久久女人精品毛片九一 | 永久免费毛片 | 最新日韩中文字幕 | 日本成人免费在线观看 | 9ⅰ精品久久久久久久久中文字幕 | 一区二区三区精品久久久 | 在线欧美日韩 | 国产精品视频全国免费观看 | 国产免费一区二区三区最新6 | 欧美另类sm图片 | 色狠狠狠 | 91精品在线观看视频 | 久久久免费毛片 | 狠狠操导航 | 国产午夜精品av一区二区 | 天天se天天cao天天干 | 国产精品一区二区三区久久 | 日韩电影中文字幕在线观看 | 在线观看免费日韩 | 丁香婷婷成人 | 999在线精品| 欧美一级片在线播放 | 91九色九色| 久久毛片网站 | 在线播放国产一区二区三区 | 97超视频免费观看 | 欧美成人基地 | 一区中文字幕在线观看 | 人人干人人草 | 777视频在线观看 | 97在线观看免费观看 | 国产亚洲欧洲 | 狠狠色伊人亚洲综合网站色 | 亚洲精品一区二区三区新线路 | 91最新视频 | 91久久黄色| 四虎国产精品永久在线国在线 | 久久国产精品99国产 | 日韩免费视频在线观看 | 久久国产一区二区 | 视频直播国产精品 | 麻豆久久久 | 91高清一区 | av网站播放 | 国产午夜精品免费一区二区三区视频 | 色偷偷97| 久久黄色网页 | 日韩在线免费视频观看 | 久久久国产一区二区三区 | 99精品视频免费在线观看 | 日韩精品在线播放 | 97av视频在线观看 | 国产一卡久久电影永久 | 欧美精品在线视频 | 男女拍拍免费视频 | 久久午夜影院 | 婷婷中文字幕 | 四虎在线观看精品视频 | 国产一级高清 | 国产美女免费视频 | 成人午夜电影网 | 欧美精品乱码久久久久久按摩 | 视频一区二区在线 | 五月天,com | 亚洲午夜av久久乱码 | 国产免费又粗又猛又爽 | 免费看三级黄色片 | 国产美女视频免费 | 日韩成人黄色 | 日韩av免费观看网站 | 国产精品欧美一区二区 | 在线观看www视频 | 国产福利a | 在线观看www视频 | 五月的婷婷 | 亚洲狠狠干 | 午夜性生活 | 亚洲成a人片在线观看网站口工 | 一区二区视频免费在线观看 | 婷婷色综合色 | 97人人人| 国产精品美女久久久久久久久 | 免费色视频 | 国产一级片在线播放 | 精品中文字幕在线观看 | 欧美精品久久人人躁人人爽 | 狠狠干夜夜爽 | 亚洲男男gaygay无套同网址 | 国产99久久精品一区二区300 | 国产亚洲免费观看 | 久久黄色小说 | 毛片播放网站 | 日韩中文字幕视频在线 | 日本在线观看一区二区 | 亚洲国内精品在线 | 97精品国产97久久久久久春色 | 久久久久一区二区三区四区 | 久久精品一区二区三 | 麻豆国产在线视频 | 9999国产| 国产主播大尺度精品福利免费 | 国产小视频免费观看 | 美女黄色网在线播放 | 色香蕉网 | 激情网婷婷 | 91精品久久久久久久久久入口 | 欧美日韩精品在线观看 | 国产91在| 狂野欧美激情性xxxx欧美 | 久久免费av电影 | 天天干天天干天天操 | 国产精品午夜免费福利视频 | 成人午夜剧场在线观看 | 国产 成人 久久 | 国产成人av一区二区三区在线观看 | 成人av片在线观看 | 欧美色综合久久 | 成人精品999| 欧美日韩视频免费看 | 国产视频精品视频 | 人人爽人人香蕉 | 日韩理论影院 | 狠狠色狠狠色终合网 | 国产精品k频道 | 亚洲成人第一区 | 中文国产字幕在线观看 | www.伊人网 | 一区二区三区免费网站 | av免费黄色 | 国产字幕在线播放 | 欧美一级久久 | 欧美视频xxx | 欧美性猛片| 黄色成人在线观看 | 91成人精品观看 | 亚洲精品天天 | 99久免费精品视频在线观看 | 福利视频午夜 | 日本中文字幕网站 | 黄色美女免费网站 | 天堂av在线网 | 五月婷婷开心中文字幕 | 高清不卡一区二区在线 | 色视频在线 | 免费高清在线观看成人 | 国产破处在线视频 | 手机看国产毛片 | 亚洲一级片 | 91高清视频在线 | 国产在线看 | 久久国产精品视频免费看 | 五月天激情婷婷 | 最新中文字幕 | 国产精品一区二区三区观看 | 久久国产精品影片 | 国产高清在线不卡 | 亚洲天天在线 | 国产最新91 | 日韩中文字幕91 | 不卡视频一区二区三区 | 午夜av免费 | 久草免费看 | 久久久影院官网 | 亚洲1区在线 | 婷婷社区五月天 | 亚洲精品成人av在线 | 日韩视频一区二区 | 久久在现视频 | 亚洲精品玖玖玖av在线看 | 国产精品一区二区三区免费看 | 欧美做受高潮1 | 精品美女在线视频 | 视频一区在线免费观看 | 91九色精品国产 | 国产精久久久久久久 | 日韩r级电影在线观看 | 日本中文乱码卡一卡二新区 | 1024在线看片 | 中文字幕乱码电影 | 日韩在线免费看 | 欧美成人精品欧美一级乱黄 | 国产精品美女久久久久久 | 欧美一区二区免费在线观看 | 日本激情视频中文字幕 | 日本aa在线 | 国产精品嫩草影院99网站 | 国产在线第三页 | 麻豆免费在线视频 | 91成人在线观看高潮 | 色资源中文字幕 | 亚洲激情视频 | 黄污污网站 | 久久久久久久国产精品影院 | 久久久亚洲成人 | 日韩在线观看视频在线 | 欧美精品亚州精品 | 久久午夜电影 | 狠狠色丁香久久婷婷综合丁香 | 日韩国产精品毛片 | 久精品视频 | 五月综合婷 | 国产美女视频网站 | 成人高清在线观看 | 欧美天堂久久 | 精品99999| 日本女人的性生活视频 | 色综合久久中文综合久久牛 | 波多野结衣综合网 | 日韩av免费一区 | av官网在线 | 亚洲乱亚洲乱亚洲 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 欧美韩国日本在线观看 | 美女视频久久久 | 天天操天天干天天操天天干 | 婷婷新五月 | 欧美另类亚洲 | 国产成人精品一二三区 | 欧美精品在线观看 | 日韩电影中文字幕 | 国产精品视频免费观看 | 波多野结衣电影一区 | 天天干天天色2020 | 欧美日韩久久一区 | 久久99精品一区二区三区三区 | 中文在线a√在线 | 国产精品久久久久久久久久三级 | 久久综合婷婷国产二区高清 | 狠狠激情中文字幕 | 伊人久久精品久久亚洲一区 | 午夜性生活 | 一级片观看 | 久久精品国产亚洲a | 亚洲激情婷婷 | 久久久免费在线观看 | 亚洲精品中文在线 | 久久少妇免费视频 | 久草久热 | 女人18片毛片90分钟 | 色av婷婷 |