1. 程式人生 > >scikit-learn學習之SVM演算法

scikit-learn學習之SVM演算法

======================================================================

本系列部落格主要參考 Scikit-Learn 官方網站上的每一個演算法進行,並進行部分翻譯,如有錯誤,請大家指正 

轉載請註明出處,謝謝  

======================================================================

一:我對SVM的理解

先介紹一些簡單的基本概念

分隔超平面:將資料集分割開來的直線叫做分隔超平面。

超平面:如果資料集是N維的,那麼就需要N-1維的某物件來對資料進行分割。該物件叫做超平面,也就是分類的決策邊界。

間隔

一個點到分割面的距離,稱為點相對於分割面的距離。

資料集中所有的點到分割面的最小間隔的2倍,稱為分類器或資料集的間隔。

最大間隔:SVM分類器是要找最大的資料集間隔。

支援向量:坐落在資料邊際的兩邊超平面上的點被稱為支援向量

1:超平面

                                                                         

對於上圖直觀的理解是紅線的分類效果最好,為什麼?

由此便引出了超平面的定義,SVM的目標就是尋找區分兩類的超平面(hyper plane),使邊際(margin)最大化。

那麼如何選擇超平面?超平面到一側最近點的距離等於另一側最近點的距離,兩個超平面平行,如下圖。

                                                                         

2:線性可區分(linear separable)和線性不可區分(linear inseparable)

上面顯示的兩個圖都是線性可區分的,就是說很容易找到一個超平面將資料分割成兩類

                                                                    

上圖中的兩個圖形都是線性不可區分的,這種情況下,我們就需要用到核函式,將資料對映到高維空間中,尋找可區分資料的超平面

                                  


對於這幅圖來說, 就是圖中黃色那個點,它是方形的,因而它是負類的一個樣本,這單獨的一個樣本,使得原本線性可分的問題變成了線性不可分的。這樣類似的問題(僅有少數點線性不可分)叫做“近似線性可分”的問題。對於這類問題的處理就引入了一個鬆弛變數,當然隨之而來的便是懲罰因子了,具體他們是什麼請參考:點選閱讀 , 這裡不做解釋

3:針對線性可區分,求超平面推導

超平面的公式可以定義為 : W * X + b = 0  W表示權重向量  W= {w1,w2,w3,w4.....,wn},n為特徵值的個數 , X為訓練例項, b表示偏移量

                                                                    

在這裡假設二維特徵向量X=(x1,x2)

做另外一個假設就是把b看作是另外一個weight,那麼超平面就可以更新為: w0 + w1 * x1 +w2 * x2 = 0 

所有超平面右上方的點滿足:                    w0 + w1 * x1 +w2 * x2 > 0

所有超平面左下方的點滿足:                    w0 + w1 * x1 +w2 * x2 < 0

調整weight,使超平面定義邊際的兩邊:

                                                                        H1:H1:w0 + w1 * x1 +w2 * x2 > 1 for yi=+1

                                                                        H2:w0 + w1 * x1 +w2 * x2  =< -1 for yi=-1

綜合上邊兩個公式得到:

                                                                       (1): yi ( w0 + w1 * x1 +w2 * x2 ) >= 1  ,對於所有的i來說

所有坐落在資料邊際的兩邊超平面上的點被稱為支援向量
分界的超平面H1和H2任意一點的距離為 1/||W
||  (推導過程這裡略過,推導參考部落格)   , ||W||表示向量的範數

                                                     W= sqrt(W1^2 + W2^2 + ... + Wn^2)
所以兩邊最大距離為                      2/||W||

利用一些數學公式的推導,以上公式(1)可以變為有限制的凸優化問題,利用KKT條件和拉格朗日公式,可以推出MMH(最大超平面)表示為以下決策邊界:

                                                                                                         

yi是支援向量點Xi的類別標記

X^T是要測試的例項

ai和b0都是單一數值型引數

l是支援向量點的個數

下面看一張示例圖片:

                 

特性:訓練好的模型演算法複雜度是由支援向量的個數決定的,而不是 資料的緯度決定的,所以SVM不太容易產生OverWriting

          SVM訓練出的模型完全依賴於支援向量,即使所有訓練集裡所有非支援向量的點都被去除,重複訓練過程,結果仍會得到一個完全一模一樣的模型

          一個SVM如果訓練得出的支援向量個數比較小,SVM訓練出的模型也容易被泛化

4:針對線性不可區分,求超平面推導

                                                            

針對這種在空間中對應的向量不能被一個超平面劃分開,用以下兩個步驟來解決

         1:利用一個非線性的對映把原資料集中的向量點轉化到一個更高維的空間中

         2:在這個高緯度的空間中找一個線性超平面來根據線性可分的情況處理

如下圖示:

                                                               

                                                       

那麼如何利用非線性對映把 轉化到高維空間中

下面看一個小例子:

                            

思考問題:如何選擇合理的非線性轉化把資料轉到高維空間中?如何解決計算內積時演算法複雜度高的問題?

答案是使用核函式

5:核函式

更多關於核函式請參考:點選閱讀




至此SVM已經被我描述的差不多,其中的兩部分求超平面的具體數學推導和核函式的具體使用方法,我並沒有寫,第一是因為,對於非數學專業的人來講確實麻煩了,其次是自己太菜,但是網上已經有很多寫的很好的部落格,大家可以參考,下面我們就來看看scikit-learn上SVM的具體使用吧

二:Scikit-learn上對SVM相關描述

1:Classification

首先我們來看看SVC,NvSVC,LinearSVC的區別和樣例

SVC(C-Support Vector Classification):支援向量分類,基於libsvm實現的(libsvm詳情參考 或者百科),資料擬合的時間複雜度是資料樣本的二次方,這使得他很難擴充套件到10000個數據集,當輸入是多類別時(SVM最初是處理二分類問題的),通過一對一的方案解決,當然也有別的解決辦法,比如說(以下為引用):

========================================================================================

SVM解決多分類問題的方法 
SVM演算法最初是為二值分類問題設計的,當處理多類問題時,就需要構造合適的多類分類器。目前,構造SVM多類分類器的方法主要有兩類:一類是直接法,直接在目標函式上進行修改,將多個分類面的引數求解合併到一個最優化問題中,通過求解該最優化問題“一次性”實現多類分類。這種方法看似簡單,但其計算複雜度比較高,實現起來比較困難,只適合用於小型問題中;另一類是間接法,主要是通過組合多個二分類器來實現多分類器的構造,常見的方法有one-against-one和one-against-all兩種。 
a.一對多法(one-versus-rest,簡稱1-v-r SVMs)。訓練時依次把某個類別的樣本歸為一類,其他剩餘的樣本歸為另一類,這樣k個類別的樣本就構造出了k個SVM。分類時將未知樣本分類為具有最大分類函式值的那類。 
b.一對一法(one-versus-one,簡稱1-v-1 SVMs)。其做法是在任意兩類樣本之間設計一個SVM,因此k個類別的樣本就需要設計k(k-1)/2個SVM。當對一個未知樣本進行分類時,最後得票最多的類別即為該未知樣本的類別。Libsvm中的多類分類就是根據這個方法實現的。 
c.層次支援向量機(H-SVMs)。層次分類法首先將所有類別分成兩個子類,再將子類進一步劃分成兩個次級子類,如此迴圈,直到得到一個單獨的類別為止。 
對c和d兩種方法的詳細說明可以參考論文《支援向量機在多類分類問題中的推廣》(計算機工程與應用。2004) 
d.其他多類分類方法。除了以上幾種方法外,還有有向無環圖SVM(Directed Acyclic Graph SVMs,簡稱DAG-SVMs)和對類別進行二進位制編碼的糾錯編碼SVMs。 

=====================================================================================
svc使用程式碼示例(我演示的是最簡單的,官網上還有很多看起來很漂亮的分類示例,感興趣的可以自己參考下):

<span style="font-family:Microsoft YaHei;"><span style="font-family:Microsoft YaHei;font-size:14px;">'''
SVC引數解釋
(1)C: 目標函式的懲罰係數C,用來平衡分類間隔margin和錯分樣本的,default C = 1.0;
(2)kernel:引數選擇有RBF, Linear, Poly, Sigmoid, 預設的是"RBF";
(3)degree:if you choose 'Poly' in param 2, this is effective, degree決定了多項式的最高次冪;
(4)gamma:核函式的係數('Poly', 'RBF' and 'Sigmoid'), 預設是gamma = 1 / n_features;
(5)coef0:核函式中的獨立項,'RBF' and 'Poly'有效;
(6)probablity: 可能性估計是否使用(true or false);
(7)shrinking:是否進行啟發式;
(8)tol(default = 1e - 3): svm結束標準的精度;
(9)cache_size: 制定訓練所需要的記憶體(以MB為單位);
(10)class_weight: 每個類所佔據的權重,不同的類設定不同的懲罰引數C, 預設的話自適應;
(11)verbose: 跟多執行緒有關,不大明白啥意思具體;
(12)max_iter: 最大迭代次數,default = 1, if max_iter = -1, no limited;
(13)decision_function_shape : ‘ovo’ 一對一, ‘ovr’ 多對多  or None 無, default=None
(14)random_state :用於概率估計的資料重排時的偽隨機數生成器的種子。
 ps:7,8,9一般不考慮。
'''
from sklearn.svm import SVC
import numpy as np
X= np.array([[-1,-1],[-2,-1],[1,1],[2,1]])
y = np.array([1,1,2,2])

clf = SVC()
clf.fit(X,y)
print clf.fit(X,y)
print clf.predict([[-0.8,-1]])</span></span>
輸出結果為:
第一個打印出的是svc訓練函式的引數,其更多引數說明請參考:點選閱讀
最後一行列印的是預測結果

NuSVC(Nu-Support Vector Classification.):核支援向量分類,和SVC類似,也是基於libsvm實現的,但不同的是通過一個引數空值支援向量的個數

示例程式碼:

<span style="font-family:Microsoft YaHei;"><span style="font-family:Microsoft YaHei;font-size:14px;">'''
NuSVC引數
nu:訓練誤差的一個上界和支援向量的分數的下界。應在間隔(0,1 ]。
其餘同SVC
'''
import numpy as np
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])
from sklearn.svm import NuSVC
clf = NuSVC()
clf.fit(X, y) 
print clf.fit(X,y)
print(clf.predict([[-0.8, -1]]))
</span></span>


輸出結果:

更多NuSVC的參考:點選閱讀


LinearSVC(Linear Support Vector Classification):線性支援向量分類,類似於SVC,但是其使用的核函式是”linear“上邊介紹的兩種是按照brf(徑向基函式計算的,其實現也不是基於LIBSVM,所以它具有更大的靈活性在選擇處罰和損失函式時,而且可以適應更大的資料集,他支援密集和稀疏的輸入是通過一對一的方式解決的

程式碼使用例項如下:

<span style="font-family:Microsoft YaHei;">'''
LinearSVC 引數解釋
C:目標函式的懲罰係數C,用來平衡分類間隔margin和錯分樣本的,default C = 1.0;
loss :指定損失函式
penalty :
dual :選擇演算法來解決對偶或原始優化問題。當n_samples > n_features 時dual=false。
tol :(default = 1e - 3): svm結束標準的精度;
multi_class:如果y輸出類別包含多類,用來確定多類策略, ovr表示一對多,“crammer_singer”優化所有類別的一個共同的目標
如果選擇“crammer_singer”,損失、懲罰和優化將會被被忽略。
fit_intercept :
intercept_scaling :
class_weight :對於每一個類別i設定懲罰係數C = class_weight[i]*C,如果不給出,權重自動調整為 n_samples / (n_classes * np.bincount(y))
verbose:跟多執行緒有關,不大明白啥意思具體<pre name="code" class="python">

from sklearn.svm import SVC

X=[[0],[1],[2],[3]]
Y = [0,1,2,3]

clf = SVC(decision_function_shape='ovo') #ovo為一對一
clf.fit(X,Y)
print clf.fit(X,Y)

dec = clf.decision_function([[1]])    #返回的是樣本距離超平面的距離
print dec

clf.decision_function_shape = "ovr"
dec =clf.decision_function([1]) #返回的是樣本距離超平面的距離
print dec

#預測
print clf.predict([1])</span>

random_state :用於概率估計的資料重排時的偽隨機數生成器的種子。max_iter :'''import numpy as npX = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])y = np.array([1, 1, 2, 2])from sklearn.svm import LinearSVCclf = LinearSVC()clf.fit(X, y) print clf.fit(X,y)print(clf.predict([[-0.8, -1]]))
結果如下:

更多關於LinearSVC請參考:點選閱讀

Multi-class classification(多類別分類)

SVC和NuSVC對於多分類問題採用的是一對一的方法,若n_class表示類別的數目,則需要構造n_class *(n_class - 1)/ 2個分類器,每一次訓練集採用兩類別,提供了一個與其它分類一致的介面,該decision_function_shape選項允許聚合結果的“一對一”的分類決策函式的形狀,下邊看一小例子
<span style="font-family:Microsoft YaHei;">#-*-coding:utf-8-*-
'''
Created on 2016年4月29日

@author: Gamer Think
'''

from sklearn.svm import SVC,LinearSVC

X=[[0],[1],[2],[3]]
Y = [0,1,2,3]

'''
SVC and NuSVC
'''
clf = SVC(decision_function_shape='ovo') #ovo為一對一
clf.fit(X,Y)
print "SVC:",clf.fit(X,Y)

dec = clf.decision_function([[1]])    #返回的是樣本距離超平面的距離
print "SVC:",dec

clf.decision_function_shape = "ovr"
dec =clf.decision_function([1]) #返回的是樣本距離超平面的距離
print "SVC:",dec

#預測
print "預測:",clf.predict([1])

'''</span><pre name="code" class="python"><span style="font-family:Microsoft YaHei;">LinearSVC</span>
'''lin_clf = LinearSVC()lin_clf.fit(X, Y) dec = lin_clf.decision_function([[1]])print "LinearSVC:",dec.shape[1]

結果顯示:

紅色字型暫時忽略

 Unbalanced problems(資料不平衡問題)

對於非平衡級分類超平面,使用不平衡SVC找出最優分類超平面,基本的思想是,我們先找到一個普通的分類超平面,自動進行校正,求出最優的分類超平面

這裡可以使用 SGDClassifier(loss="hinge")代替SVC(kernel="linear")

針對下面的svc可以使用 clf=SGDClassifier(n_iter=100,alpha=0.01) 代替

<span style="font-family:Microsoft YaHei;"># -*-coding:utf-8-*-
'''
Created on 2016年5月4日

@author: Gamer Think
'''
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
#from sklearn.linear_model import SGDClassifier

# we create 40 separable points
rng = np.random.RandomState(0)
n_samples_1 = 1000
n_samples_2 = 100
X = np.r_[1.5 * rng.randn(n_samples_1, 2),0.5 * rng.randn(n_samples_2, 2) + [2, 2]]
y = [0] * (n_samples_1) + [1] * (n_samples_2)
print X
print y

# fit the model and get the separating hyperplane
clf = svm.SVC(kernel='linear', C=1.0)
clf.fit(X, y)

w = clf.coef_[0]
a = -w[0] / w[1]      #a可以理解為斜率
xx = np.linspace(-5, 5)
yy = a * xx - clf.intercept_[0] / w[1]    #二維座標下的直線方程


# get the separating hyperplane using weighted classes
wclf = svm.SVC(kernel='linear', class_weight={1: 10})
wclf.fit(X, y)

ww = wclf.coef_[0]
wa = -ww[0] / ww[1]
wyy = wa * xx - wclf.intercept_[0] / ww[1]   #帶權重的直線

# plot separating hyperplanes and samples
h0 = plt.plot(xx, yy, 'k-', label='no weights')
h1 = plt.plot(xx, wyy, 'k--', label='with weights')
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.legend()

plt.axis('tight')
plt.show()</span>
執行結果截圖

 2:Regression

支援分類的支援向量機可以推廣到解決迴歸問題,這種方法稱為支援向量迴歸 支援向量分類所產生的模型僅僅依賴於訓練資料的一個子集,因為構建模型的成本函式不關心在超出邊界範圍的點,類似的,通過支援向量迴歸產生的模型依賴於訓練資料的一個子集,因為構建模型的函式忽略了靠近預測模型的資料集。 有三種不同的實現方式:支援向量迴歸SVR,nusvr和linearsvr。linearsvr提供了比SVR更快實施但只考慮線性核函式,而nusvr實現比SVR和linearsvr略有不同。
作為分類類別,訓練函式將X,y作為向量,在這種情況下y是浮點數
<span style="font-family:Microsoft YaHei;">>>> from sklearn import svm
>>> X = [[0, 0], [2, 2]]
>>> y = [0.5, 2.5]
>>> clf = svm.SVR()
>>> clf.fit(X, y) 
SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma='auto',
    kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False)
>>> clf.predict([[1, 1]])
array([ 1.5])</span>

下面看一個使用SVR做線性迴歸的例子:
<span style="font-family:Microsoft YaHei;">#-*-coding:utf-8-*-
'''
Created on 2016年5月4日

@author: Gamer Think
'''
import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt

###############################################################################
# Generate sample data
X = np.sort(5 * np.random.rand(40, 1), axis=0)  #產生40組資料,每組一個數據,axis=0決定按列排列,=1表示行排列
y = np.sin(X).ravel()   #np.sin()輸出的是列,和X對應,ravel表示轉換成行

###############################################################################
# Add noise to targets
y[::5] += 3 * (0.5 - np.random.rand(8))

###############################################################################
# Fit regression model
svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1)
svr_lin = SVR(kernel='linear', C=1e3)
svr_poly = SVR(kernel='poly', C=1e3, degree=2)
y_rbf = svr_rbf.fit(X, y).predict(X)
y_lin = svr_lin.fit(X, y).predict(X)
y_poly = svr_poly.fit(X, y).predict(X)

###############################################################################
# look at the results
lw = 2
plt.scatter(X, y, color='darkorange', label='data')
plt.hold('on')
plt.plot(X, y_rbf, color='navy', lw=lw, label='RBF model')
plt.plot(X, y_lin, color='c', lw=lw, label='Linear model')
plt.plot(X, y_poly, color='cornflowerblue', lw=lw, label='Polynomial model')
plt.xlabel('data')
plt.ylabel('target')
plt.title('Support Vector Regression')
plt.legend()
plt.show()</span>

執行結果:

當然,官網上還有關於以下幾個方面的,在這裡小編就不翻譯了感興趣的自己看吧: SVM實在是很強大,不是我這等菜鳥短時間內所能參透的,以後有機會還會繼續學習SVM,我相信不同的時間看同一個演算法或者專案會有不同的收穫,謝謝

相關推薦

scikit-learn學習SVM演算法

====================================================================== 本系列部落格主要參考 Scikit-Learn 官方網站上的每一個演算法進行,並進行部分翻譯,如有錯誤,請大家指正  轉載請註明

scikit-learn學習K-means聚類演算法與 Mini Batch K-Means演算法

======================================================================本系列部落格主要參考 Scikit-Learn 官方網站上的每一個演算法進行,並進行部分翻譯,如有錯誤,請大家指正    轉載請註明出

scikit-learn學習K-means聚類演算法與 Mini Batch K-Means演算法 [轉自別的作者,還有其他sklearn翻譯]

http://blog.csdn.net/gamer_gyt/article/details/51244850 ====================================================================== 本系列部落格主要

scikit-learn學習決策樹演算法

======================================================================本系列部落格主要參考 Scikit-Learn 官方網站上的每

scikit-learn學習K最近鄰演算法(KNN)

======================================================================本系列部落格主要參考 Scikit-Learn 官方網站上的每一個演算法進行,並進行部分翻譯,如有錯誤,請大家指正   ========

scikit-learn學習迴歸分析

======================================================================本系列部落格主要參考 Scikit-Learn 官方網站上的

支援向量機SVM演算法庫(scikit-learn)(三)

1. SVM核函式概述     在scikit-learn中,內建的核函式一共有4種,當然如果你認為線性核函式不算核函式的話,那就只有三種。     1)線性核函式(Linear Kernel)表示式為:K(x,z)=x∙zK(x,z)=x∙z,就是普通的內積,LinearSVC 和 Linea

SciKit-Learn學習筆記】5:核SVM分類和預測乳腺癌資料集

學習《scikit-learn機器學習》時的一些實踐。 常用引數 引數C SVM分類器svm.SVC()中的引數C即SVM所優化的目標函式 a

SciKit-Learn學習筆記】8:k-均值演算法做文字聚類,聚類演算法效能評估

學習《scikit-learn機器學習》時的一些實踐。 原理見K-means和K-means++的演算法原理及sklearn庫中引數解釋、選擇。 sklearn中的KMeans from sklearn.datasets import make_blobs from m

SciKit-Learn學習筆記】7:PCA結合SVM做AT&T資料集人物影象分類

學習《scikit-learn機器學習》時的一些實踐。 原理見PCA及繪製降維與恢復示意圖。 sklearn的PCA sklearn中包裝的PCA也是不帶有歸一化和縮放等預處理操作的,可以用MinMaxScaler()實現並裝在Pipeline裡封裝起來。 from

SciKit-Learn學習筆記】1:SVM預測digits資料集,繪製隨機波動樣本的學習曲線

學習《scikit-learn機器學習》時的一些實踐。 SVM預測digits資料集 sklearn裡的各種模型物件統一了介面,fit()做訓練,predit()做預測,用score()獲得對模型測試結果的打分。 這裡的打分不是acc,應該是決定係數。 檢視資料形式

ML:Scikit-Learn 學習筆記(3) --- Nearest Neighbors 最近鄰 迴歸及相關演算法

1 最近鄰迴歸 最近鄰迴歸是用在標籤值是連續取值的場景智商的,而不是離散取值,而是用最近鄰迴歸進行查詢的點,最後得到的結果是其所有最近鄰居的平均值。 scikit-learn 在迴歸部分,同樣實現了兩種迴歸演算法,和之前的一樣,和KNN思想近似的KNeigh

Scikit-learn例項Pca+Svm人臉識別(AT&T資料集)

from __future__ import print_function from time import time import logging import matplotlib.pyplot as plt import cv2 from numpy import * from sklearn.mo

scikit-learn學習LDA主題模型

大小 href 房子 鏈接 size 目標 文本 訓練樣本 papers     在LDA模型原理篇我們總結了LDA主題模型的原理,這裏我們就從應用的角度來使用scikit-learn來學習LDA主題模型。除了scikit-learn, 還有spark MLlib和gen

機器學習 SVM VC維度、樣本數目與經驗風險最小化的關系

能力 pan dsm 過擬合 引入 div 不但 機器 con VC維在有限的訓練樣本情況下,當樣本數 n 固定時。此時學習機器的 VC 維越高學習機器的復雜性越高。VC 維反映了函數集的學習能力,VC 維越大則學習機器越復雜(容量越大)。

機器學習SVM初解與淺析(一):最大距離

機器學習 svm 最大距離 2 / ||w|| 這段時間在看周誌華大佬的《機器學習》,在看書的過程中,有時候會搜搜其他人寫的文章,對比來講,周教授講的內容還是比較深刻的,但是前幾天看到SVM這一章的時候,感覺甚是晦澀啊,第一感覺就是比較抽象,特別是對於像本人這種I

機器學習SVM初解與淺析(一):

機器學習 svm 最大距離 2 / ||w||sdsshngshan‘gccha 這段時間在看周誌華大佬的《機器學習》,在看書的過程中,有時候會搜搜其他人寫的文章,對比來講,周教授講的內容還是比較深刻的,但是前幾天看到SVM這一章的時候,感覺甚是晦澀啊,第一感覺就

windows下使用scikit-learn學習機器學習——安裝和配置

style weight 這一 策略 學習資料 scipy 錯誤 erl pycharm   環境搭建過程挺麻煩...但終於是弄好了,先給一些過程中參考的比較重要的資料(找微軟的機器學習資料是個人摸索經驗,無任何借鑒):     1.如果嫌網上各種numpy、scipy等

機器學習SVM

人工 lane 三維 分享 局限 優化問題 道理 原理 AS 一、線性分類器: 首先給出一個非常非常簡單的分類問題(線性可分),我們要用一條直線,將下圖中黑色的點和白色的點分開,很顯然,圖上的這條直線就是我們要求的直線之一(可以有無數條這樣的直線)

Scikit-learn學習

ted als kit was val ida port from pre scikit-learn是構建在Numpy,Matplotlib等工具之上的一套完整的機器學習工具庫。TensorFlow的接口封裝仿照其進行了設計 樣本劃分問題 使用交叉驗證集劃分樣本,代碼: f