国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

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

佛山新網(wǎng)站制作特色網(wǎng)站推廣排名

佛山新網(wǎng)站制作特色,網(wǎng)站推廣排名,wordpress文章目錄導(dǎo)航,文山 硯山 網(wǎng)站建設(shè)👨?🎓作者簡介:一位即將上大四,正專攻機(jī)器學(xué)習(xí)的保研er 🌌上期文章:機(jī)器學(xué)習(xí)&&深度學(xué)習(xí)——多層感知機(jī)的簡潔實現(xiàn) 📚訂閱專欄:機(jī)器學(xué)習(xí)&&深度學(xué)習(xí) 希望文章對你們有…

👨?🎓作者簡介:一位即將上大四,正專攻機(jī)器學(xué)習(xí)的保研er
🌌上期文章:機(jī)器學(xué)習(xí)&&深度學(xué)習(xí)——多層感知機(jī)的簡潔實現(xiàn)
📚訂閱專欄:機(jī)器學(xué)習(xí)&&深度學(xué)習(xí)
希望文章對你們有所幫助

在機(jī)器學(xué)習(xí)中,我們的目標(biāo)是發(fā)現(xiàn)模式。但是,我們需要確定模型不只是簡單記住了數(shù)據(jù),還要確定模型真正發(fā)現(xiàn)了一種泛化的模式。我們的模型需要判斷從未見過的情況,只有當(dāng)模型發(fā)現(xiàn)了一種泛化模式時,才會作出有效的預(yù)測。
正式地講,我們的目標(biāo)是發(fā)現(xiàn)某些模式,這些模式會捕捉到我們訓(xùn)練集潛在總體的規(guī)律。如果成功做到這點,那么即便是以前從未遇到過的個體,模型也可以成功地評估風(fēng)險。如何發(fā)現(xiàn)泛化模式是機(jī)器學(xué)習(xí)的根本問題。
困難在于,當(dāng)我們訓(xùn)練模型時,只能訪問數(shù)據(jù)中的小部分樣本,這樣可能會導(dǎo)致我們在收集更多數(shù)據(jù)時,可能會發(fā)現(xiàn)之前找到的明顯關(guān)系不成立。
將模型在訓(xùn)練數(shù)據(jù)上擬合的比在潛在分布中更接近的現(xiàn)象稱為過擬合,用于對抗過擬合的技術(shù)稱為正則化
而在之前用Fashion-MNIST數(shù)據(jù)集做實驗時就出現(xiàn)了過擬合現(xiàn)象。在實驗中調(diào)整模型架構(gòu)或超參數(shù)時會發(fā)現(xiàn):如果有足夠多的神經(jīng)元、層數(shù)和訓(xùn)練迭代周期,模型最終可以在訓(xùn)練集上達(dá)到完美的精度,此時測試集的準(zhǔn)確性卻下降了。

模型選擇、欠擬合和過擬合

  • 訓(xùn)練誤差和泛化誤差
    • 統(tǒng)計學(xué)習(xí)理論
    • 模型復(fù)雜性
  • 模型選擇
    • 驗證集
    • K折交叉驗證
  • 欠擬合還是過擬合?
    • 估計模型容量
    • 模型復(fù)雜性
    • 數(shù)據(jù)集大小
  • 多項式回歸
    • 生成數(shù)據(jù)集
    • 對模型進(jìn)行訓(xùn)練和測試
    • 三階多項式函數(shù)擬合(正常)
    • 線性函數(shù)擬合(欠擬合)
    • 高階多項式函數(shù)擬合(過擬合)

訓(xùn)練誤差和泛化誤差

舉個例子來體會一下何為誤差:
假設(shè)讓模型來判斷100個人里面誰最有可能下個月不還銀行貸款,這時候我們的模型發(fā)現(xiàn),上個月沒還的五個人都穿了藍(lán)色衣服,結(jié)果模型就把這個藍(lán)色信息記住了,但是這其實是沒有道理的,他們下個月可能穿著紅衣服不還貸款。
訓(xùn)練誤差:模型在訓(xùn)練數(shù)據(jù)集上計算得到的誤差。
泛化誤差:模型應(yīng)用在同樣從原始樣本的分布中抽取的無限多數(shù)據(jù)樣本時,模型誤差的期望。
我們不能準(zhǔn)確地計算出泛化誤差,在實際中,我們只能通過將模型應(yīng)用于一個獨立的測試集來估計泛化誤差, 該測試集由隨機(jī)選取的、未曾在訓(xùn)練集中出現(xiàn)的數(shù)據(jù)樣本構(gòu)成。
例子:根據(jù)??汲煽冾A(yù)測未來考試成績,但是過去的考試表現(xiàn)很好(訓(xùn)練誤差)不代表未來考試會好(泛化誤差)

統(tǒng)計學(xué)習(xí)理論

我們假設(shè)訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)都是從相同的分布中獨立提取的。這通常叫作獨立同分布假設(shè),這意味著對數(shù)據(jù)進(jìn)行采樣的過程沒有進(jìn)行記憶。比如,抽取的第2個樣本和第3個樣本的相關(guān)性,并不比抽取的第2個樣本和第200萬個樣本的相關(guān)性更強(qiáng)。
假設(shè)是存在漏洞的,假設(shè)可能會出現(xiàn)實效的情況。比如兩個數(shù)據(jù)的分布可能不是完全一樣的(用醫(yī)院A的患者數(shù)據(jù)訓(xùn)練死亡風(fēng)險預(yù)測評估,將其應(yīng)用于醫(yī)院B的話),又或是抽樣的過程可能與時間有關(guān)(對微博主題進(jìn)行分類時,新聞周期會使得正在討論的話題產(chǎn)生時間依賴性,從而違反獨立性假設(shè))。
有時候我們即使輕微違背獨立同分布假設(shè),模型仍將繼續(xù)運行得非常好,例如人臉識別、語音識別。幾乎所有現(xiàn)實的應(yīng)用都至少涉及到一些違背獨立同分布假設(shè)的情況。
但是有時候會很麻煩,比如,我們試圖只用來自大學(xué)生的人臉數(shù)據(jù)來訓(xùn)練一個人臉識別系統(tǒng), 然后想要用它來監(jiān)測老人,大學(xué)生和老年人看起來區(qū)別還是很大的。
因此,接下來將會討論因違背獨立同分布假設(shè)而引起的問題。即使認(rèn)為獨立同分布假設(shè)是理所當(dāng)然的,理解泛化性也不容易。
當(dāng)我們訓(xùn)練模型時,我們試圖找到一個能夠盡可能擬合訓(xùn)練數(shù)據(jù)的函數(shù)。但是如果它執(zhí)行地“太好了”,而不能對看不見的數(shù)據(jù)做到很好泛化,就會導(dǎo)致過擬合

模型復(fù)雜性

當(dāng)我們有簡單的模型和大量的數(shù)據(jù)時,我們期望泛化誤差與訓(xùn)練誤差相近。當(dāng)我們有更復(fù)雜的模型和更少的樣本時,我們預(yù)計訓(xùn)練誤差會下降,但泛化誤差會增大。
我們很難比較本質(zhì)上不同大類的模型之間(例如,決策樹與神經(jīng)網(wǎng)絡(luò))的復(fù)雜性。目前可以用一條簡單的經(jīng)驗法:能夠輕松解釋任意事實的模型是復(fù)雜的。
下面重點介紹幾個傾向于影響模型泛化的因素:
1、可調(diào)整參數(shù)的數(shù)量,當(dāng)可調(diào)整參數(shù)的數(shù)量(自由度)很大時,模型更容易過擬合
2、參數(shù)采用的值,當(dāng)權(quán)重的取值范圍較大時,模型更容易過擬合
3、訓(xùn)練樣本的數(shù)量,即使模型很簡單,也很容易過擬合只包含一兩個樣本的數(shù)據(jù)集,而過擬合一個有百萬樣本的數(shù)據(jù)集就需要非常靈活的模型了。

模型選擇

通常在評估幾個模型后選擇最后模型,這個過程就是模型選擇。有時要比較的模型本質(zhì)不同,有時是同樣的模型設(shè)置不同的超參數(shù)的情況下進(jìn)行比較。
例如,訓(xùn)練多層感知機(jī)時,我們可能就希望有不同數(shù)量的隱藏層和不同數(shù)量的隱藏單元、不同的激活函數(shù)組合等等。要選出最佳模型,我們會常使用驗證集。

驗證集

原則上,在我們確定所有的超參數(shù)之前,我們不能用測試集。(如果過擬合了訓(xùn)練數(shù)據(jù),我們可以通過測試數(shù)據(jù)來判斷出來,但是如果用了測試數(shù)據(jù)來進(jìn)行模型選擇,要是測試數(shù)據(jù)過擬合了,我們卻無從得知,只能錯認(rèn)為這個模型是好的)。
然而,我們也不能僅靠訓(xùn)練數(shù)據(jù)來選擇模型,因為無從得知訓(xùn)練數(shù)據(jù)的泛化誤差。
理想情況下我們只用測試數(shù)據(jù)一次來評估模型,但是現(xiàn)實中測試數(shù)據(jù)往往不會測一次就丟了,因為我們可能沒有那么多的數(shù)據(jù)對每一輪的實驗采用全新測試機(jī)。
解決這個問題的常見做法是把數(shù)據(jù)分為三分:訓(xùn)練集、測試機(jī)、驗證集。多加了個驗證數(shù)據(jù)集。
現(xiàn)實中的驗證集和測試機(jī)的邊界太模糊了,所以以后沒有說明的情況還是盡量用驗證集,準(zhǔn)確度也是代表著驗證集準(zhǔn)確度。

K折交叉驗證

訓(xùn)練數(shù)據(jù)太少時,我們可能無法提供足夠數(shù)據(jù)來構(gòu)成一個合適驗證集,此時可以采用K折交叉驗證。原始訓(xùn)練數(shù)據(jù)被分成K個不重疊的子集,然后執(zhí)行K次模型訓(xùn)練和驗證,每次在K-1個子集上進(jìn)行訓(xùn)練,并在剩余的子集上進(jìn)行驗證。最后通過對K此實驗的結(jié)果取平均來估計訓(xùn)練和驗證誤差。
算法如下:

·將訓(xùn)練數(shù)據(jù)分割成K塊
·For i=1,…,K
···使用第i塊作為驗證數(shù)據(jù)集
·報告K個驗證集誤差的平均

常用K為5或10。

欠擬合還是過擬合?

如果模型不能降低訓(xùn)練誤差,這可能意味著模型過于簡單,無法捕獲試圖學(xué)習(xí)的模式。我們有理由相信可以用一個更復(fù)雜的模型降低訓(xùn)練誤差,這種現(xiàn)象就叫做欠擬合。
而當(dāng)我們的訓(xùn)練誤差明顯低于驗證誤差的時候要小心,這表明嚴(yán)重的過擬合。過擬合并不一定就是壞的。最終,我們會更關(guān)心驗證誤差,而不是訓(xùn)練誤差和驗證誤差之間的差距。
是否過擬合或欠擬合可能取決于模型復(fù)雜性和可用訓(xùn)練數(shù)據(jù)集的大小,下面給出一個非常粗略的表格(行表示數(shù)據(jù)的簡單或復(fù)雜,列表示模型容量的低或高):

簡單復(fù)雜
正常欠擬合
過擬合正常

估計模型容量

我們難以在不同的種類算法之間比較(如樹模型和神經(jīng)網(wǎng)絡(luò)),我們可以給定一個模型種類,根據(jù):
1、參數(shù)的個數(shù)
2、參數(shù)值的選擇范圍
來大致估計模型容量的大小,如圖:
在這里插入圖片描述
在這里插入圖片描述
容易看出第一個參數(shù)個數(shù)為d+1個,第二個參數(shù)的個數(shù)為(d+1)m+(m+1)k個,顯然后者更復(fù)雜。

模型復(fù)雜性

為了說明過擬合和模型復(fù)雜性的經(jīng)典直覺,我們給出一個多項式例子,給定單個特征x和對應(yīng)實數(shù)標(biāo)簽y組成的訓(xùn)練數(shù)據(jù),視圖找到下面的d階多項式來估計標(biāo)簽y:
y ^ = ∑ i = 0 d x i w i \hat{y}=\sum_{i=0}^dx^iw_i y^?=i=0d?xiwi?
這是一個線性回歸問題,我們的特征是x的冪給出的,模型權(quán)重是w給出的,偏置是w0給出的(因為所有的x都有x的0次冪等于1)。線性回歸問題,我們可以用平方誤差來作為我們的損失函數(shù)。
高階多項式函數(shù)比低階多項式函數(shù)復(fù)雜得多。高階多項式的參數(shù)較多,模型函數(shù)的選擇范圍較廣。因此在固定訓(xùn)練數(shù)據(jù)集的情況下,高階多項式函數(shù)相對于低階多項式的訓(xùn)練誤差應(yīng)該始終更低(最壞也是相等)。
下圖直觀描述了模型復(fù)雜度(多項式階數(shù))和欠擬合與過擬合之間的關(guān)系:
在這里插入圖片描述
理解起來也簡單:
1、對于簡單的模型,擬合數(shù)據(jù)的能力很差,那么獲得泛化的能力也是非常差的,這時候自然泛化誤差與訓(xùn)練誤差都很高。
2、隨著模型復(fù)雜度的增大,模型能夠越來越擬合訓(xùn)練數(shù)據(jù),這時候我們可以認(rèn)為其泛化能力也會增強(qiáng),泛化損失也會降低。
3、但是如果模型復(fù)雜度過大,他記憶能力就太強(qiáng)了,可能會記住很多無用的噪聲信息(比如之前所說的上個月不還貸款的人都穿藍(lán)衣服,這其實是噪聲項)。那這時候再去拿新數(shù)據(jù)驗證的時候,就容易出現(xiàn)問題,因此模型復(fù)雜度太大的時候可能會導(dǎo)致訓(xùn)練誤差逐漸降低的同時泛化損失反而變大。

數(shù)據(jù)集大小

另一個重要因素是數(shù)據(jù)集大小。訓(xùn)練數(shù)據(jù)集中的樣本越少,越可能過擬合。隨著訓(xùn)練數(shù)據(jù)量的增加,泛化誤差通常會減小,一般更多的數(shù)據(jù)是不會有什么壞處的。
模型復(fù)雜性和數(shù)據(jù)集大小之間通常存在關(guān)系,給出更多的數(shù)據(jù),我們可能會嘗試擬合一個更復(fù)雜的模型;如果沒有更多的數(shù)據(jù),簡單模型可能會更有用。

多項式回歸

這邊我們通過多項式擬合來直觀感受擬合的概念。

import math
import numpy as np
import torch
from torch import nn
from d2l import torch as d2l

生成數(shù)據(jù)集

給定x,我們使用以下三階多項式來生成訓(xùn)練和測試數(shù)據(jù)的標(biāo)簽:
y = 5 + 1.2 x ? 3.4 x 2 2 ! + 5.6 x 3 3 ! + σ 其中 σ 符合正態(tài)分布 N ( 0 , 0. 1 2 ) y=5+1.2x-3.4\frac{x^2}{2!}+5.6\frac{x^3}{3!}+\sigma\\ 其中\(zhòng)sigma符合正態(tài)分布N(0,0.1^2) y=5+1.2x?3.42!x2?+5.63!x3?+σ其中σ符合正態(tài)分布N(0,0.12)
在優(yōu)化的過程中,我們通常希望避免非常大的梯度值或損失值。這就是我們將特征從從xi調(diào)整為xi/i!的原因,這樣可以避免很大的i帶來的特別大的指數(shù)值。我們將為訓(xùn)練集和測試集各生成100個樣本。

max_degree = 20  # 多項式的最大階數(shù)
n_train, n_test = 100, 100  # 訓(xùn)練和測試數(shù)據(jù)集大小
true_w = np.zeros(max_degree)  # 分配大量的空間
true_w[0:4] = np.array([5, 1.2, -3.4, 5.6])features = np.random.normal(size=(n_train + n_test, 1))
np.random.shuffle(features)
poly_features = np.power(features, np.arange(max_degree).reshape(1, -1))  # 把每個features都實現(xiàn)x的0到19次冪的運算
for i in range(max_degree):  # 每個x的次冪都要除以其次冪的階乘poly_features[:, i] /= math.gamma(i + 1)  # gamma(n)=(n-1)!
# labels的維度:(n_train+n_test,)
labels = np.dot(poly_features, true_w)
labels += np.random.normal(scale=0.1, size=labels.shape)

同樣,存儲在poly_features中的單項式由gamma函數(shù)重新縮放,體重gamma(n)=(n-1)!。從生成的數(shù)據(jù)集中查看一下前2個樣本,第一個值是與偏置相對應(yīng)的常量特征。

# Numpy ndarray轉(zhuǎn)換為tensor
true_w, features, poly_features, labels = [torch.tensor(x, dtype=torch.float32) for x in [true_w, features, poly_features, labels]]print(features[:2], '\n', poly_features[:2, :], '\n', labels[:2])

tensor([[0.2813],
[1.4815]])
tensor([[1.0000e+00, 2.8131e-01, 3.9568e-02, 3.7104e-03, 2.6094e-04, 1.4681e-05,
6.8834e-07, 2.7663e-08, 9.7274e-10, 3.0405e-11, 8.5533e-13, 2.1874e-14,
5.1279e-16, 1.1096e-17, 2.2297e-19, 4.1816e-21, 7.3521e-23, 1.2166e-24,
1.9014e-26, 2.8152e-28],
[1.0000e+00, 1.4815e+00, 1.0974e+00, 5.4194e-01, 2.0072e-01, 5.9474e-02,
1.4685e-02, 3.1080e-03, 5.7556e-04, 9.4743e-05, 1.4036e-05, 1.8904e-06,
2.3339e-07, 2.6597e-08, 2.8145e-09, 2.7798e-10, 2.5739e-11, 2.2431e-12,
1.8462e-13, 1.4395e-14]])
tensor([5.3927, 6.0603])

對模型進(jìn)行訓(xùn)練和測試

實現(xiàn)一個函數(shù)來評估模型在給定數(shù)據(jù)集上的損失

def evaluate_loss(net, data_iter, loss):  #@save"""評估給定數(shù)據(jù)集上模型的損失"""metric = d2l.Accumulator(2)  # 0:損失的總和,1:樣本的數(shù)量for X, y in data_iter:out = net(X)  # 得到網(wǎng)絡(luò)輸出后的值(預(yù)測值)y = y.reshape(out.shape)  # 原先的值,形狀要調(diào)整成一樣的l = loss(out, y)  # 計算損失metric.add(l.sum(), l.numel())return metric[0] / metric[1]

下面定義一下訓(xùn)練函數(shù):

def train(train_features, test_features, train_labels, test_labels,num_epochs=400):loss = nn.MSELoss(reduction='none')  # 對于線性模型,我們直接使用MSELoss均方誤差損失input_shape = train_features.shape[-1]  # shape[-1]表示讀取最后一個維度的長度,其實在這里就等價于shape[1],因為只有2個維度# 不設(shè)置偏置,因為我們已經(jīng)在多項式中就實現(xiàn)了它net = nn.Sequential(nn.Linear(input_shape, 1, bias=False))batch_size = min(10, train_labels.shape[0])train_iter = d2l.load_array((train_features, train_labels.reshape(-1, 1)),batch_size)test_iter = d2l.load_array((test_features, test_labels.reshape(-1, 1)),batch_size, is_train=False)  # 把is_train設(shè)為False就代表是測試的trainer = torch.optim.SGD(net.parameters(), lr=0.01)animator = d2l.Animator(xlabel='epoch', ylabel='loss', yscale='log',xlim=[1, num_epochs], ylim=[1e-3, 1e2],legend=['train', 'test'])for epoch in range(num_epochs):d2l.train_epoch_ch3(net, train_iter, loss, trainer)if epoch == 0 or (epoch + 1) % 20 == 0:animator.add(epoch + 1, (evaluate_loss(net, train_iter, loss),evaluate_loss(net, test_iter, loss)))print('weight:', net[0].weight.data.numpy())

三階多項式函數(shù)擬合(正常)

首先使用三階多項式函數(shù),這與數(shù)據(jù)生成函數(shù)的階數(shù)是相同的。結(jié)果表明該模型可以有效降低訓(xùn)練損失與測試損失。且學(xué)習(xí)到的模型參數(shù)也接近真實值。

# 從多項式特征中選擇前4個維度,也就是x^0,x^2/2!,x^3/3!
train(poly_features[:n_train, :4], poly_features[n_train:, :4],labels[:n_train], labels[n_train:])
d2l.plt.show()

輸出值:

weight: [[ 4.9961195 1.220384 -3.417343 5.5525904]]

運行圖片:
在這里插入圖片描述

線性函數(shù)擬合(欠擬合)

如果我們用線性函數(shù),也就是只需要多項式特征中選擇前兩個維度(x0和x1),此時減少改模型的訓(xùn)練損失就比較困難了。最后一個迭代周期完成以后,訓(xùn)練損失仍然很高,如此可以看出模型太簡單容易造成欠擬合。

# 從多項式特征中選擇前2個維度,即1和x
train(poly_features[:n_train, :2], poly_features[n_train:, :2],labels[:n_train], labels[n_train:])
d2l.plt.show()

輸出:

weight: [[3.0301607 4.413203 ]]

圖片:
在這里插入圖片描述

高階多項式函數(shù)擬合(過擬合)

此時,如果我們在多項式特征中選取了所有的維度,但是此時我們沒有足夠的數(shù)據(jù)用于學(xué)到高階系數(shù)應(yīng)該具有接近于0的值。因此,這個復(fù)雜的模型就會很容易受到訓(xùn)練數(shù)據(jù)中的噪聲的影響了。雖然訓(xùn)練損失可以有效降低,但測試損失仍然很高。結(jié)果表明,復(fù)雜模型對數(shù)據(jù)造成了過擬合。

# 從多項式特征中選取所有維度
train(poly_features[:n_train, :], poly_features[n_train:, :],labels[:n_train], labels[n_train:], num_epochs=1500)
d2l.plt.show()

輸出結(jié)果:

weight: [[ 5.0168414 1.3087198 -3.4513204 5.1666236 0.10954458 1.1009666
0.18435563 0.17159764 0.15245272 0.12382802 -0.13876013 -0.14683287
-0.18860853 -0.19347051 0.10141594 0.09009624 -0.02940431 0.18723282
-0.20842025 0.04670855]]

圖片:
在這里插入圖片描述

http://aloenet.com.cn/news/42184.html

相關(guān)文章:

  • 沒有網(wǎng)站怎么做淘客視頻號怎么推廣流量
  • 臨沂做網(wǎng)站電話信息發(fā)布平臺推廣有哪些
  • 編程課有必要學(xué)嗎丈哥seo博客工具
  • 武漢網(wǎng)站設(shè)計站建設(shè)seo課程
  • 政務(wù)網(wǎng)站的建設(shè)時期的概述品牌策劃公司哪家好
  • 多語言網(wǎng)站實現(xiàn)微信引流推廣怎么做
  • 張家港網(wǎng)站建設(shè)做網(wǎng)站免費的網(wǎng)絡(luò)營銷方式
  • 網(wǎng)站怎么做別名專門搜索知乎內(nèi)容的搜索引擎
  • 網(wǎng)站圖片怎么做超鏈接百家號關(guān)鍵詞排名
  • 萬能造假截圖生成器上海外貿(mào)seo
  • 做的好的購物網(wǎng)站佛山網(wǎng)站設(shè)計實力樂云seo
  • 學(xué)校網(wǎng)站制作方案我對網(wǎng)絡(luò)營銷的理解
  • 購物網(wǎng)站的基本功能營銷網(wǎng)絡(luò)是什么
  • 網(wǎng)站開發(fā)外包報價建設(shè)網(wǎng)站
  • 推薦常州網(wǎng)站建設(shè)seo技術(shù)員
  • 可以做宣傳海報的網(wǎng)站信息流優(yōu)化師簡歷怎么寫
  • 網(wǎng)站目錄怎么做推廣專員是做什么的
  • 最新國際新聞頭條今日國際大事件seo計費系統(tǒng)登錄
  • 做網(wǎng)站濱州市最近的時事新聞
  • 杭州手機(jī)申請網(wǎng)站登錄谷歌chrome
  • 哪個網(wǎng)站的圖片可以做素材永久觀看不收費的直播
  • 魏縣做網(wǎng)站網(wǎng)站排名推廣工具
  • 普象工業(yè)設(shè)計網(wǎng)站上海最新事件
  • 上海制作網(wǎng)頁宣傳seo發(fā)展前景怎么樣啊
  • 如何知道網(wǎng)站開發(fā)語言軟文營銷的成功案例
  • wordpress計算器主題優(yōu)化站點
  • 怎么做淘寶客的跳轉(zhuǎn)網(wǎng)站免費的網(wǎng)頁入口
  • 上海企業(yè)網(wǎng)站建設(shè)谷歌關(guān)鍵詞挖掘工具
  • 重慶網(wǎng)站推廣轉(zhuǎn)化率鄭州seo聯(lián)系搜點網(wǎng)絡(luò)效果好
  • 網(wǎng)站建設(shè)及第三方支付沈陽網(wǎng)絡(luò)優(yōu)化培訓(xùn)