在之前的描述中,我們通常把機(jī)器學(xué)習(xí)模型和訓(xùn)練算法當(dāng)作黑箱子來(lái)處理。如果你實(shí)踐過(guò)前幾章的一些示例,你驚奇的發(fā)現(xiàn)你可以優(yōu)化回歸系統(tǒng),改進(jìn)數(shù)字圖像的分類器,你甚至可以零基礎(chǔ)搭建一個(gè)垃圾郵件的分類器,但是你卻對(duì)它們內(nèi)部的工作流程一無(wú)所知。事實(shí)上,許多場(chǎng)合你都不需要知道這些黑箱子的內(nèi)部有什么,干了什么。
然而,如果你對(duì)其內(nèi)部的工作流程有一定了解的話,當(dāng)面對(duì)一個(gè)機(jī)器學(xué)習(xí)任務(wù)時(shí)候,這些理論可以幫助你快速的找到恰當(dāng)?shù)臋C(jī)器學(xué)習(xí)模型,合適的訓(xùn)練算法,以及一個(gè)好的假設(shè)集。同時(shí),了解黑箱子內(nèi)部的構(gòu)成,有助于你更好地調(diào)試參數(shù)以及更有效的誤差分析。本章討論的大部分話題對(duì)于機(jī)器學(xué)習(xí)模型的理解,構(gòu)建,以及神經(jīng)網(wǎng)絡(luò)(詳細(xì)參考本書(shū)的第二部分)的訓(xùn)練都是非常重要的。
首先我們將以一個(gè)簡(jiǎn)單的線性回歸模型為例,討論兩種不同的訓(xùn)練方法來(lái)得到模型的最優(yōu)解:
直接使用封閉方程進(jìn)行求根運(yùn)算,得到模型在當(dāng)前訓(xùn)練集上的最優(yōu)參數(shù)(即在訓(xùn)練集上使損失函數(shù)達(dá)到最小值的模型參數(shù))
使用迭代優(yōu)化方法:梯度下降(GD),在訓(xùn)練集上,它可以逐漸調(diào)整模型參數(shù)以獲得最小的損失函數(shù),最終,參數(shù)會(huì)收斂到和第一種方法相同的的值。同時(shí),我們也會(huì)介紹一些梯度下降的變體形式:批量梯度下降(Batch GD)、小批量梯度下降(Mini-batch GD)、隨機(jī)梯度下降(Stochastic GD),在第二部分的神經(jīng)網(wǎng)絡(luò)部分,我們會(huì)多次使用它們。
接下來(lái),我們將研究一個(gè)更復(fù)雜的模型:多項(xiàng)式回歸,它可以擬合非線性數(shù)據(jù)集,由于它比線性模型擁有更多的參數(shù),于是它更容易出現(xiàn)模型的過(guò)擬合。因此,我們將介紹如何通過(guò)學(xué)習(xí)曲線去判斷模型是否出現(xiàn)了過(guò)擬合,并介紹幾種正則化方法以減少模型出現(xiàn)過(guò)擬合的風(fēng)險(xiǎn)。
最后,我們將介紹兩個(gè)常用于分類的模型:Logistic回歸和Softmax回歸
提示
在本章中包含許多數(shù)學(xué)公式,以及一些線性代數(shù)和微積分基本概念。為了理解這些公式,你需要知道什么是向量,什么是矩陣,以及它們直接是如何轉(zhuǎn)化的,以及什么是點(diǎn)積,什么是矩陣的逆,什么是偏導(dǎo)數(shù)。如果你對(duì)這些不是很熟悉的話,你可以閱讀本書(shū)提供的 Jupyter 在線筆記,它包括了線性代數(shù)和微積分的入門指導(dǎo)。對(duì)于那些不喜歡數(shù)學(xué)的人,你也應(yīng)該快速簡(jiǎn)單的瀏覽這些公式。希望它足以幫助你理解大多數(shù)的概念。
線性回歸
在第一章,我們介紹了一個(gè)簡(jiǎn)單的的生活滿意度回歸模型:
$$ life_satisfaction = \theta _{0} + \theta _{1} * GDP_per_capita $$
這個(gè)模型僅僅是輸入量GDP_per_capita的線性函數(shù),$\theta _{0}$ 和 $\theta _{1}$ 是這個(gè)模型的參數(shù),線性模型更一般化的描述指通過(guò)計(jì)算輸入變量的加權(quán)和,并加上一個(gè)常數(shù)偏置項(xiàng)(截距項(xiàng))來(lái)得到一個(gè)預(yù)測(cè)值。如公式 4-1:
公式 4-1:線性回歸預(yù)測(cè)模型
$$ \hat{y} = \theta _{0} + \theta _{1}x _{1}+\theta _{2}x _{2}+\dots+\theta _{n}x _{n} $$
$\hat{y}$ 表示預(yù)測(cè)結(jié)果
$n$ 表示特征的個(gè)數(shù)
$x_{i}$ 表示第i個(gè)特征的值
$\theta_{j}$ 表示第j個(gè)參數(shù)(包括偏置項(xiàng) $\theta _{0}$ 和特征權(quán)重值 $\theta _{1},\theta _{2},\dots,\theta _{n}$)
上述公式可以寫(xiě)成更為簡(jiǎn)潔的向量形式,如公式 4-2:
公式 4-2:線性回歸預(yù)測(cè)模型(向量形式)
$$ \hat{y} = h _{\theta} (\mathbf{x})= \theta^T \cdot \mathbf{x} $$
$\theta$ 表示模型的參數(shù)向量包括偏置項(xiàng) $\theta _{0}$ 和特征權(quán)重值 $\theta _{1}$ 到 $\theta _{n}$
$\theta^T$ 表示向量$\theta$的轉(zhuǎn)置(行向量變?yōu)榱肆邢蛄浚?/p>
$\mathbf{x}$ 為每個(gè)樣本中特征值的向量形式,包括 $x {1}$ 到 $x{n}$,而且 $x_0$ 恒為 1
$\theta^T \cdot \mathbf{x}$ 表示 $\theta^T$ 和$ \mathbf{x}$ 的點(diǎn)積
$h_{\theta}$ 表示參數(shù)為 $\theta$ 的假設(shè)函數(shù)
怎么樣去訓(xùn)練一個(gè)線性回歸模型呢?好吧,回想一下,訓(xùn)練一個(gè)模型指的是設(shè)置模型的參數(shù)使得這個(gè)模型在訓(xùn)練集的表現(xiàn)較好。為此,我們首先需要找到一個(gè)衡量模型好壞的評(píng)定方法。在第二章,我們介紹到在回歸模型上,最常見(jiàn)的評(píng)定標(biāo)準(zhǔn)是均方根誤差(RMSE,詳見(jiàn)公式 2-1)。因此,為了訓(xùn)練一個(gè)線性回歸模型,你需要找到一個(gè) $\theta$ 值,它使得均方根誤差(標(biāo)準(zhǔn)誤差)達(dá)到最小值。實(shí)踐過(guò)程中,最小化均方誤差比最小化均方根誤差更加的簡(jiǎn)單,這兩個(gè)過(guò)程會(huì)得到相同的 $\theta$,因?yàn)楹瘮?shù)在最小值時(shí)候的自變量,同樣能使函數(shù)的方根運(yùn)算得到最小值。
在訓(xùn)練集 $\mathbf{X}$ 上使用公式 4-3 來(lái)計(jì)算線性回歸假設(shè) $h_{\theta}$ 的均方差($MSE$)。
公式 4-3:線性回歸模型的 MSE 損失函數(shù)
$$ MSE (\mathbf{X},h {\theta}$) = $\frac{1}{m} \sum\limits{i=1}^m{\left(\theta^T \cdot \mathbf{x}^{(i)}-y^{(i)}\right)}^2 $$
公式中符號(hào)的含義大多數(shù)都在第二章(詳見(jiàn)“符號(hào)”)進(jìn)行了說(shuō)明,不同的是:為了突出模型的參數(shù)向量 $\theta$,使用 $h_{\theta}$ 來(lái)代替 $h$。以后的使用中為了公式的簡(jiǎn)潔,使用 $MSE(\theta)$ 來(lái)代替 $MSE(\mathbf{X},h _{\theta})$。
正態(tài)方程
為了找到最小化損失函數(shù)的 $\theta$ 值,可以采用公式解,換句話說(shuō),就是可以通過(guò)解正態(tài)方程直接得到最后的結(jié)果。
公式 4-4:正態(tài)方程
$$ \hat{\theta} = ({\mathbf{X}}^T\cdot\mathbf{X})^{-1}\cdot{\mathbf{X}}^T\cdot\mathbf{y} $$
$\hat{\theta}$ 指最小化損失 $\theta$ 的值
$\mathbf{y}$ 是一個(gè)向量,其包含了 $y^{(1)}$ 到 $y^{(m)}$ 的值
讓我們生成一些近似線性的數(shù)據(jù)(如圖 4-1)來(lái)測(cè)試一下這個(gè)方程。
import numpy as np X = 2 * np.random.rand(100, 1) y = 4 + 3 * X + np.random.randn(100, 1)
圖 4-1:隨機(jī)線性數(shù)據(jù)集
現(xiàn)在讓我們使用正態(tài)方程來(lái)計(jì)算 $\hat{\theta}$,我們將使用 Numpy 的線性代數(shù)模塊(np.linalg)中的inv()函數(shù)來(lái)計(jì)算矩陣的逆,以及dot()方法來(lái)計(jì)算矩陣的乘法。
X_b = np.c_[np.ones((100, 1)), X] theta_best = np.linalg.inv(X_b.T.dot(X_B)).dot(X_b.T).dot(y)
我們生產(chǎn)數(shù)據(jù)的函數(shù)實(shí)際上是 $y = 4 + 3x_0 + 高斯噪聲$。讓我們看一下最后的計(jì)算結(jié)果。
>>> theta_best array([[4.21509616],[2.77011339]])
我們希望最后得到的參數(shù)為 $\theta_0=4,\theta_1=3$ 而不是 $\theta_0=3.865,\theta_1=3.139$ (譯者注:我認(rèn)為應(yīng)該是 $\theta_0=4.2150,\theta_1=2.7701$)。這已經(jīng)足夠了,由于存在噪聲,參數(shù)不可能達(dá)到到原始函數(shù)的值。
現(xiàn)在我們能夠使用 $\hat{\theta}$ 來(lái)進(jìn)行預(yù)測(cè):
>>> X_new = np.array([[0],[2]]) >>> X_new_b = np.c_[np.ones((2, 1)), X_new] >>> y_predict = X_new_b.dot(theta.best) >>> y_predict array([[4.21509616],[9.75532293]])
畫(huà)出這個(gè)模型的圖像,如圖 4-2
plt.plot(X_new,y_predict,"r-") plt.plot(X,y,"b.") plt.axis([0,2,0,15]) plt.show()
圖4-2:線性回歸預(yù)測(cè)
使用下面的 Scikit-Learn 代碼可以達(dá)到相同的效果:
計(jì)算復(fù)雜度
正態(tài)方程需要計(jì)算矩陣 ${\mathbf{X}}^T\cdot\mathbf{X}$ 的逆,它是一個(gè) $n * n$ 的矩陣($n$ 是特征的個(gè)數(shù))。這樣一個(gè)矩陣求逆的運(yùn)算復(fù)雜度大約在 $O(n^{2.4})$ 到 $O(n^3)$ 之間,具體值取決于計(jì)算方式。換句話說(shuō),如果你將你的特征個(gè)數(shù)翻倍的話,其計(jì)算時(shí)間大概會(huì)變?yōu)樵瓉?lái)的 5.3($2^{2.4}$)到 8($2^3$)倍。
提示
當(dāng)特征的個(gè)數(shù)較大的時(shí)候(例如:特征數(shù)量為 100000),正態(tài)方程求解將會(huì)非常慢。
有利的一面是,這個(gè)方程在訓(xùn)練集上對(duì)于每一個(gè)實(shí)例來(lái)說(shuō)是線性的,其復(fù)雜度為 $O(m)$,因此只要有能放得下它的內(nèi)存空間,它就可以對(duì)大規(guī)模數(shù)據(jù)進(jìn)行訓(xùn)練。同時(shí),一旦你得到了線性回歸模型(通過(guò)解正態(tài)方程或者其他的算法),進(jìn)行預(yù)測(cè)是非常快的。因?yàn)槟P椭杏?jì)算復(fù)雜度對(duì)于要進(jìn)行預(yù)測(cè)的實(shí)例數(shù)量和特征個(gè)數(shù)都是線性的。 換句話說(shuō),當(dāng)實(shí)例個(gè)數(shù)變?yōu)樵瓉?lái)的兩倍多的時(shí)候(或特征個(gè)數(shù)變?yōu)樵瓉?lái)的兩倍多),預(yù)測(cè)時(shí)間也僅僅是原來(lái)的兩倍多。
接下來(lái),我們將介紹另一種方法去訓(xùn)練模型。這種方法適合在特征個(gè)數(shù)非常多,訓(xùn)練實(shí)例非常多,內(nèi)存無(wú)法滿足要求的時(shí)候使用。
梯度下降
梯度下降是一種非常通用的優(yōu)化算法,它能夠很好地解決一系列問(wèn)題。梯度下降的整體思路是通過(guò)的迭代來(lái)逐漸調(diào)整參數(shù)使得損失函數(shù)達(dá)到最小值。
假設(shè)濃霧下,你迷失在了大山中,你只能感受到自己腳下的坡度。為了最快到達(dá)山底,一個(gè)最好的方法就是沿著坡度最陡的地方下山。這其實(shí)就是梯度下降所做的:它計(jì)算誤差函數(shù)關(guān)于參數(shù)向量$\theta$的局部梯度,同時(shí)它沿著梯度下降的方向進(jìn)行下一次迭代。當(dāng)梯度值為零的時(shí)候,就達(dá)到了誤差函數(shù)最小值 。
具體來(lái)說(shuō),開(kāi)始時(shí),需要選定一個(gè)隨機(jī)的$\theta$(這個(gè)值稱為隨機(jī)初始值),然后逐漸去改進(jìn)它,每一次變化一小步,每一步都試著降低損失函數(shù)(例如:均方差損失函數(shù)),直到算法收斂到一個(gè)最小值(如圖:4-3)。
圖 4-3:梯度下降
在梯度下降中一個(gè)重要的參數(shù)是步長(zhǎng),超參數(shù)學(xué)習(xí)率的值決定了步長(zhǎng)的大小。如果學(xué)習(xí)率太小,必須經(jīng)過(guò)多次迭代,算法才能收斂,這是非常耗時(shí)的(如圖 4-4)。
圖 4-4:學(xué)習(xí)率過(guò)小
另一方面,如果學(xué)習(xí)率太大,你將跳過(guò)最低點(diǎn),到達(dá)山谷的另一面,可能下一次的值比上一次還要大。這可能使的算法是發(fā)散的,函數(shù)值變得越來(lái)越大,永遠(yuǎn)不可能找到一個(gè)好的答案(如圖 4-5)。
圖 4-5:學(xué)習(xí)率過(guò)大
最后,并不是所有的損失函數(shù)看起來(lái)都像一個(gè)規(guī)則的碗。它們可能是洞,山脊,高原和各種不規(guī)則的地形,使它們收斂到最小值非常的困難。 圖 4-6 顯示了梯度下降的兩個(gè)主要挑戰(zhàn):如果隨機(jī)初始值選在了圖像的左側(cè),則它將收斂到局部最小值,這個(gè)值要比全局最小值要大。 如果它從右側(cè)開(kāi)始,那么跨越高原將需要很長(zhǎng)時(shí)間,如果你早早地結(jié)束訓(xùn)練,你將永遠(yuǎn)到不了全局最小值。
圖 4-6:梯度下降的陷阱
幸運(yùn)的是線性回歸模型的均方差損失函數(shù)是一個(gè)凸函數(shù),這意味著如果你選擇曲線上的任意兩點(diǎn),它們的連線段不會(huì)與曲線發(fā)生交叉(譯者注:該線段不會(huì)與曲線有第三個(gè)交點(diǎn))。這意味著這個(gè)損失函數(shù)沒(méi)有局部最小值,僅僅只有一個(gè)全局最小值。同時(shí)它也是一個(gè)斜率不能突變的連續(xù)函數(shù)。這兩個(gè)因素導(dǎo)致了一個(gè)好的結(jié)果:梯度下降可以無(wú)限接近全局最小值。(只要你訓(xùn)練時(shí)間足夠長(zhǎng),同時(shí)學(xué)習(xí)率不是太大 )。
事實(shí)上,損失函數(shù)的圖像呈現(xiàn)碗狀,但是不同特征的取值范圍相差較大的時(shí),這個(gè)碗可能是細(xì)長(zhǎng)的。圖 4-7 展示了梯度下降在不同訓(xùn)練集上的表現(xiàn)。在左圖中,特征 1 和特征 2 有著相同的數(shù)值尺度。在右圖中,特征 1 比特征2的取值要小的多,由于特征 1 較小,因此損失函數(shù)改變時(shí),$\theta_1$ 會(huì)有較大的變化,于是這個(gè)圖像會(huì)在$\theta_1$軸方向變得細(xì)長(zhǎng)。
圖 4-7:有無(wú)特征縮放的梯度下降
正如你看到的,左面的梯度下降可以直接快速地到達(dá)最小值,然而在右面的梯度下降第一次前進(jìn)的方向幾乎和全局最小值的方向垂直,并且最后到達(dá)一個(gè)幾乎平坦的山谷,在平坦的山谷走了很長(zhǎng)時(shí)間。它最終會(huì)達(dá)到最小值,但它需要很長(zhǎng)時(shí)間。
提示
當(dāng)我們使用梯度下降的時(shí)候,應(yīng)該確保所有的特征有著相近的尺度范圍(例如:使用 Scikit Learn 的 StandardScaler類),否則它將需要很長(zhǎng)的時(shí)間才能夠收斂。
這幅圖也表明了一個(gè)事實(shí):訓(xùn)練模型意味著找到一組模型參數(shù),這組參數(shù)可以在訓(xùn)練集上使得損失函數(shù)最小。這是對(duì)于模型參數(shù)空間的搜索,模型的參數(shù)越多,參數(shù)空間的維度越多,找到合適的參數(shù)越困難。例如在300維的空間找到一枚針要比在三維空間里找到一枚針復(fù)雜的多。幸運(yùn)的是線性回歸模型的損失函數(shù)是凸函數(shù),這個(gè)最優(yōu)參數(shù)一定在碗的底部。
批量梯度下降
使用梯度下降的過(guò)程中,你需要計(jì)算每一個(gè) $\theta_j$ 下?lián)p失函數(shù)的梯度。換句話說(shuō),你需要計(jì)算當(dāng)$\theta_j$變化一點(diǎn)點(diǎn)時(shí),損失函數(shù)改變了多少。這稱為偏導(dǎo)數(shù),它就像當(dāng)你面對(duì)東方的時(shí)候問(wèn):"我腳下的坡度是多少?"。然后面向北方的時(shí)候問(wèn)同樣的問(wèn)題(如果你能想象一個(gè)超過(guò)三維的宇宙,可以對(duì)所有的方向都這樣做)。公式 4-5 計(jì)算關(guān)于 $\theta_j$ 的損失函數(shù)的偏導(dǎo)數(shù),記為 $\frac{\partial }{\partial \theta_j}MSE(\theta)$。
公式 4-5: 損失函數(shù)的偏導(dǎo)數(shù)
$$ \frac{\partial }{\partial \theta_j}MSE(\theta)=\frac{2}{m} \sum\limits_{i=1}^m{\left(\theta^T \cdot \mathbf{x}^{(i)}-y^{(i)}\right)}{x_j}^{(i)} $$
為了避免單獨(dú)計(jì)算每一個(gè)梯度,你也可以使用公式 4-6 來(lái)一起計(jì)算它們。梯度向量記為 $\nabla_{\theta}MSE(\theta)$,其包含了損失函數(shù)所有的偏導(dǎo)數(shù)(每個(gè)模型參數(shù)只出現(xiàn)一次)。
公式 4-6:損失函數(shù)的梯度向量
$$ \nabla_{\theta}MSE(\theta)= \left(\begin{matrix} \frac{\partial }{\partial \theta_0}MSE(\theta)\ \frac{\partial }{\partial \theta_1}MSE(\theta)\ \vdots \ \frac{\partial }{\partial \theta_n}MSE(\theta)\ \end{matrix}\right) =\frac{2}{m}{\mathbf{X}}^T\cdot{(\mathbf{X}\cdot\theta-y)} $$
提示
在這個(gè)方程中每一步計(jì)算時(shí)都包含了整個(gè)訓(xùn)練集 $\mathbf{X}$,這也是為什么這個(gè)算法稱為批量梯度下降:每一次訓(xùn)練過(guò)程都使用所有的的訓(xùn)練數(shù)據(jù)。因此,在大數(shù)據(jù)集上,其會(huì)變得相當(dāng)?shù)穆ǖ俏覀兘酉聛?lái)將會(huì)介紹更快的梯度下降算法)。然而,梯度下降的運(yùn)算規(guī)模和特征的數(shù)量成正比。訓(xùn)練一個(gè)數(shù)千數(shù)量特征的線性回歸模型使用*梯度下降要比使用正態(tài)方程快的多。
一旦求得了方向是上山的梯度向量,你就可以向著相反的方向去下山。這意味著從 $\theta$ 中減去 $\nabla_{\theta}MSE(\theta)$。學(xué)習(xí)率 $\eta$ 和梯度向量的積決定了下山時(shí)每一步的大小,如公式 4-7。
公式 4-7:梯度下降步長(zhǎng)
$$ \theta^{(next\ step)}=\theta - \eta\nabla_{\theta}MSE(\theta) $$
讓我們看一下這個(gè)算法的應(yīng)用:
eta = 0.1 # 學(xué)習(xí)率 n_iterations = 1000 m = 100 theta = np.random.randn(2,1) # 隨機(jī)初始值 for iteration in range(n_iterations): gradients = 2/m * X_b.T.dot(X_b.dot(theta) - y) theta = theta - eta * gradiens
這不是太難,讓我們看一下最后的結(jié)果 $\theta$:
>>> theta array([[4.21509616],[2.77011339]])
看!正態(tài)方程的表現(xiàn)非常好。完美地求出了梯度下降的參數(shù)。但是當(dāng)你換一個(gè)學(xué)習(xí)率會(huì)發(fā)生什么?圖 4-8 展示了使用了三個(gè)不同的學(xué)習(xí)率進(jìn)行梯度下降的前 10 步運(yùn)算(虛線代表起始位置)。
圖 4-8:不同學(xué)習(xí)率的梯度下降
在左面的那副圖中,學(xué)習(xí)率是最小的,算法幾乎不能求出最后的結(jié)果,而且還會(huì)花費(fèi)大量的時(shí)間。在中間的這幅圖中,學(xué)習(xí)率的表現(xiàn)看起來(lái)不錯(cuò),僅僅幾次迭代后,它就收斂到了最后的結(jié)果。在右面的那副圖中,學(xué)習(xí)率太大了,算法是發(fā)散的,跳過(guò)了所有的訓(xùn)練樣本,同時(shí)每一步都離正確的結(jié)果越來(lái)越遠(yuǎn)。
為了找到一個(gè)好的學(xué)習(xí)率,你可以使用網(wǎng)格搜索(詳見(jiàn)第二章)。當(dāng)然,你一般會(huì)限制迭代的次數(shù),以便網(wǎng)格搜索可以消除模型需要很長(zhǎng)時(shí)間才能收斂這一個(gè)問(wèn)題。
你可能想知道如何選取迭代的次數(shù)。如果它太小了,當(dāng)算法停止的時(shí)候,你依然沒(méi)有找到最優(yōu)解。如果它太大了,算法會(huì)非常的耗時(shí)同時(shí)后來(lái)的迭代參數(shù)也不會(huì)發(fā)生改變。一個(gè)簡(jiǎn)單的解決方法是:設(shè)置一個(gè)非常大的迭代次數(shù),但是當(dāng)梯度向量變得非常小的時(shí)候,結(jié)束迭代。非常小指的是:梯度向量小于一個(gè)值 $\varepsilon$(稱為容差)。這時(shí)候可以認(rèn)為梯度下降幾乎已經(jīng)達(dá)到了最小值。
收斂速率:
當(dāng)損失函數(shù)是凸函數(shù),同時(shí)它的斜率不能突變(就像均方差損失函數(shù)那樣),那么它的批量梯度下降算法固定學(xué)習(xí)率之后,它的收斂速率是 $O(\frac{1}{iterations})$。換句話說(shuō),如果你將容差 $\varepsilon$ 縮小 10 倍后(這樣可以得到一個(gè)更精確的結(jié)果),這個(gè)算法的迭代次數(shù)大約會(huì)變成原來(lái)的 10 倍。
-
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8423瀏覽量
132744 -
tensorflow
+關(guān)注
關(guān)注
13文章
329瀏覽量
60538 -
sklearn
+關(guān)注
關(guān)注
0文章
2瀏覽量
3410
原文標(biāo)題:【翻譯】Sklearn 與 TensorFlow 機(jī)器學(xué)習(xí)實(shí)用指南 —— 第4章( 上) 訓(xùn)練模型
文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛(ài)好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論