這個和用不用python沒啥關(guān)系,是數(shù)據(jù)來源的問題。 調(diào)用淘寶API,使用 api相關(guān)接口獲得你想要的內(nèi)容,我 記得api中有相關(guān)的接口,你可以看一下接口的說明。 用python做爬蟲來進行頁面數(shù)據(jù)的獲齲。
十余年品牌的成都網(wǎng)站建設(shè)公司,超過千家企業(yè)網(wǎng)站設(shè)計經(jīng)驗.價格合理,可準確把握網(wǎng)頁設(shè)計訴求.提供定制網(wǎng)站建設(shè)、購物商城網(wǎng)站建設(shè)、微信小程序、響應(yīng)式網(wǎng)站開發(fā)等服務(wù),我們設(shè)計的作品屢獲殊榮,是您值得信賴的專業(yè)網(wǎng)站設(shè)計公司。
SVM 是 Support Vector Machine 的簡稱,它的中文名為支持向量機,屬于一種有監(jiān)督的機器學(xué)習(xí)算法,可用于離散因變量的分類和連續(xù)因變量的預(yù)測。通常情況下,該算法相對于其他單一的分類算法(如 Logistic 回歸、決策樹、樸素貝葉斯、 KNN 等)會有更好的預(yù)測準確率,主要是因為它可以將低維線性不可分的空間轉(zhuǎn)換為高維的線性可分空間。
“分割帶”代表了模型劃分樣本點的能力或可信度,“分割帶”越寬,說明模型能夠?qū)颖军c劃分得越清晰,進而保證模型泛化能力越強,分類的可信度越高;反之,“分割帶”越窄,說明模型的準確率越容易受到異常點的影響,進而理解為模型的預(yù)測能力越弱,分類的可信度越低。
線性可分的 所對應(yīng)的函數(shù)間隔滿足 的條件,故 就等于 。所以,可以將目標函數(shù) 等價為如下的表達式:
假設(shè)存在一個需要最小化的目標函數(shù) ,并且該目標函數(shù)同時受到 的約束。如需得到最優(yōu)化的解,則需要利用拉格朗日對偶性將原始的最優(yōu)化問題轉(zhuǎn)換為對偶問題,即:
分割面的求解
分割面的表達式
對于非線性SVM模型而言,需要經(jīng)過兩個步驟,一個是將原始空間中的樣本點映射到高維的新空間中,另一個是在新空間中尋找一個用于識別各類別樣本點線性“超平面”。
假設(shè)原始空間中的樣本點為 ,將樣本通過某種轉(zhuǎn)換 映射到高維空間中,則非線性SVM模型的目標函數(shù)可以表示為:
其中,內(nèi)積 可以利用核函數(shù)替換,即 。對于上式而言,同樣需要計算最優(yōu)的拉格朗日乘積 ,進而可以得到線性“超平面” 與 的值:
假設(shè)原始空間中的兩個樣本點為 ,在其擴展到高維空間后,它們的內(nèi)積 如果等于樣本點 在原始空間中某個函數(shù)的輸出,那么該函數(shù)就稱為核函數(shù)。
線性核函數(shù)的表達式為 ,故對應(yīng)的分割“超平面”為:
多項式核函數(shù)的表達式為 ,故對應(yīng)的分割“超平面”為:
高斯核函數(shù)的表達式為 ,故對應(yīng)的分割“超平面”為:
Sigmoid 核函數(shù)的表達式為 ,故對應(yīng)的分割“超平面”為:
在實際應(yīng)用中, SVM 模型對核函數(shù)的選擇是非常敏感的,所以需要通過先驗的領(lǐng)域知識或者交叉驗證的方法選出合理的核函數(shù)。大多數(shù)情況下,選擇高斯核函數(shù)是一種相對偷懶而有效的方法,因為高斯核是一種指數(shù)函數(shù),它的泰勒展開式可以是無窮維的,即相當(dāng)于把原始樣本點映射到高維空間中。
output_13_0.png
Python函數(shù)的參數(shù)類型主要包括必選參數(shù)、可選參數(shù)、可變參數(shù)、位置參數(shù)和關(guān)鍵字參數(shù),本文介紹一下他們的定義以及可變數(shù)據(jù)類型參數(shù)傳遞需要注意的地方。
必選參數(shù)(Required arguments)是必須輸入的參數(shù),比如下面的代碼,必須輸入2個參數(shù),否則就會報錯:
其實上面例子中的參數(shù) num1和num2也屬于關(guān)鍵字參數(shù),比如可以通過如下方式調(diào)用:
執(zhí)行結(jié)果:
可選參數(shù)(Optional arguments)可以不用傳入函數(shù),有一個默認值,如果沒有傳入會使用默認值,不會報錯。
位置參數(shù)(positional arguments)根據(jù)其在函數(shù)定義中的位置調(diào)用,下面是pow()函數(shù)的幫助信息:
x,y,z三個參數(shù)的的順序是固定的,并且不能使用關(guān)鍵字:
輸出:
在上面的pow()函數(shù)幫助信息中可以看到位置參數(shù)后面加了一個反斜杠 / ,這是python內(nèi)置函數(shù)的語法定義,Python開發(fā)人員不能在python3.8版本之前的代碼中使用此語法。但python3.0到3.7版本可以使用如下方式定義位置參數(shù):
星號前面的參數(shù)為位置參數(shù)或者關(guān)鍵字參數(shù),星號后面是強制關(guān)鍵字參數(shù),具體介紹見強制關(guān)鍵字參數(shù)。
python3.8版本引入了強制位置參數(shù)(Positional-Only Parameters),也就是我們可以使用反斜杠 / 語法來定義位置參數(shù)了,可以寫成如下形式:
來看下面的例子:
python3.8運行:
不能使用關(guān)鍵字參數(shù)形式賦值了。
可變參數(shù) (varargs argument) 就是傳入的參數(shù)個數(shù)是可變的,可以是0-n個,使用星號( * )將輸入?yún)?shù)自動組裝為一個元組(tuple):
執(zhí)行結(jié)果:
關(guān)鍵字參數(shù)(keyword argument)允許將任意個含參數(shù)名的參數(shù)導(dǎo)入到python函數(shù)中,使用雙星號( ** ),在函數(shù)內(nèi)部自動組裝為一個字典。
執(zhí)行結(jié)果:
上面介紹的參數(shù)可以混合使用:
結(jié)果:
注意:由于傳入的參數(shù)個數(shù)不定,所以當(dāng)與普通參數(shù)一同使用時,必須把帶星號的參數(shù)放在最后。
強制關(guān)鍵字參數(shù)(Keyword-Only Arguments)是python3引入的特性,可參考:。 使用一個星號隔開:
在位置參數(shù)一節(jié)介紹過星號前面的參數(shù)可以是位置參數(shù)和關(guān)鍵字參數(shù)。星號后面的參數(shù)都是強制關(guān)鍵字參數(shù),必須以指定參數(shù)名的方式傳參,如果強制關(guān)鍵字參數(shù)沒有設(shè)置默認參數(shù),調(diào)用函數(shù)時必須傳參。
執(zhí)行結(jié)果:
也可以在可變參數(shù)后面命名關(guān)鍵字參數(shù),這樣就不需要星號分隔符了:
執(zhí)行結(jié)果:
在Python對象及內(nèi)存管理機制中介紹了python中的參數(shù)傳遞屬于對象的 引用傳遞 (pass by object reference),在編寫函數(shù)的時候需要特別注意。
先來看個例子:
執(zhí)行結(jié)果:
l1 和 l2指向相同的地址,由于列表可變,l1改變時,l2也跟著變了。
接著看下面的例子:
結(jié)果:
l1沒有變化!為什么不是[1, 2, 3, 4]呢?
l = l + [4]表示創(chuàng)建一個“末尾加入元素 4“的新列表,并讓 l 指向這個新的對象,l1沒有進行任何操作,因此 l1 的值不變。如果要改變l1的值,需要加一個返回值:
結(jié)果:
下面的代碼執(zhí)行結(jié)果又是什么呢?
執(zhí)行結(jié)果:
和第一個例子一樣,l1 和 l2指向相同的地址,所以會一起改變。這個問題怎么解決呢?
可以使用下面的方式:
也可以使用淺拷貝或者深度拷貝,具體使用方法可參考Python對象及內(nèi)存管理機制。這個問題在Python編程時需要特別注意。
本文主要介紹了python函數(shù)的幾種參數(shù)類型:必選參數(shù)、可選參數(shù)、可變參數(shù)、位置參數(shù)、強制位置參數(shù)、關(guān)鍵字參數(shù)、強制關(guān)鍵字參數(shù),注意他們不是完全獨立的,比如必選參數(shù)、可選參數(shù)也可以是關(guān)鍵字參數(shù),位置參數(shù)可以是必選參數(shù)或者可選參數(shù)。
另外,python中的參數(shù)傳遞屬于對象的 引用傳遞 ,在對可變數(shù)據(jù)類型進行參數(shù)傳遞時需要特別注意,如有必要,使用python的拷貝方法。
參考文檔:
--THE END--