机器学习:sklearn数据集与机器学习组成
機(jī)器學(xué)習(xí)組成:模型、策略、優(yōu)化
《統(tǒng)計機(jī)器學(xué)習(xí)》中指出:機(jī)器學(xué)習(xí)=模型+策略+算法。其實(shí)機(jī)器學(xué)習(xí)可以表示為:Learning= Representation+Evalution+Optimization。我們就可以將這樣的表示和李航老師的說法對應(yīng)起來。機(jī)器學(xué)習(xí)主要是由三部分組成,即:表示(模型)、評價(策略)和優(yōu)化(算法)。
表示(或者稱為:模型):Representation
表示主要做的就是建模,故可以稱為模型。模型要完成的主要工作是轉(zhuǎn)換:將實(shí)際問題轉(zhuǎn)化成為計算機(jī)可以理解的問題,就是我們平時說的建模。類似于傳統(tǒng)的計算機(jī)學(xué)科中的算法,數(shù)據(jù)結(jié)構(gòu),如何將實(shí)際的問題轉(zhuǎn)換成計算機(jī)可以表示的方式。這部分可以見“簡單易學(xué)的機(jī)器學(xué)習(xí)算法”。給定數(shù)據(jù),我們怎么去選擇對應(yīng)的問題去解決,選擇正確的已有的模型是重要的一步。
評價(或者稱為:策略):Evalution
評價的目標(biāo)是判斷已建好的模型的優(yōu)劣。對于第一步中建好的模型,評價是一個指標(biāo),用于表示模型的優(yōu)劣。這里就會是一些評價的指標(biāo)以及一些評價函數(shù)的設(shè)計。在機(jī)器學(xué)習(xí)中會有針對性的評價指標(biāo)。
- 分類問題
優(yōu)化:Optimization
優(yōu)化的目標(biāo)是評價的函數(shù),我們是希望能夠找到最好的模型,也就是說評價最高的模型。
開發(fā)機(jī)器學(xué)習(xí)應(yīng)用程序的步驟
(1)收集數(shù)據(jù)
我們可以使用很多方法收集樣本護(hù)具,如:制作網(wǎng)絡(luò)爬蟲從網(wǎng)站上抽取數(shù)據(jù)、從RSS反饋或者API中得到信息、設(shè)備發(fā)送過來的實(shí)測數(shù)據(jù)。
(2)準(zhǔn)備輸入數(shù)據(jù)
得到數(shù)據(jù)之后,還必須確保數(shù)據(jù)格式符合要求。
(3)分析輸入數(shù)據(jù)
這一步的主要作用是確保數(shù)據(jù)集中沒有垃圾數(shù)據(jù)。如果是使用信任的數(shù)據(jù)來源,那么可以直接跳過這個步驟
(4)訓(xùn)練算法
機(jī)器學(xué)習(xí)算法從這一步才真正開始學(xué)習(xí)。如果使用無監(jiān)督學(xué)習(xí)算法,由于不存在目標(biāo)變量值,故而也不需要訓(xùn)練算法,所有與算法相關(guān)的內(nèi)容在第(5)步
(5)測試算法
這一步將實(shí)際使用第(4)步機(jī)器學(xué)習(xí)得到的知識信息。當(dāng)然在這也需要評估結(jié)果的準(zhǔn)確率,然后根據(jù)需要重新訓(xùn)練你的算法
(6)使用算法
轉(zhuǎn)化為應(yīng)用程序,執(zhí)行實(shí)際任務(wù)。以檢驗(yàn)上述步驟是否可以在實(shí)際環(huán)境中正常工作。如果碰到新的數(shù)據(jù)問題,同樣需要重復(fù)執(zhí)行上述的步驟
一、scikit-learn數(shù)據(jù)集
我們將介紹sklearn中的數(shù)據(jù)集類,模塊包括用于加載數(shù)據(jù)集的實(shí)用程序,包括加載和獲取流行參考數(shù)據(jù)集的方法。它還具有一些人工數(shù)據(jù)生成器。
sklearn.datasets
(1)datasets.load_*()
獲取小規(guī)模數(shù)據(jù)集,數(shù)據(jù)包含在datasets里
(2)datasets.fetch_*()
獲取大規(guī)模數(shù)據(jù)集,需要從網(wǎng)絡(luò)上下載,函數(shù)的第一個參數(shù)是data_home,表示數(shù)據(jù)集下載的目錄,默認(rèn)是 ~/scikit_learn_data/,要修改默認(rèn)目錄,可以修改環(huán)境變量SCIKIT_LEARN_DATA
(3)datasets.make_*()
本地生成數(shù)據(jù)集
load*和 fetch* 函數(shù)返回的數(shù)據(jù)類型是 datasets.base.Bunch,本質(zhì)上是一個 dict,它的鍵值對可用通過對象的屬性方式訪問。主要包含以下屬性:
data:特征數(shù)據(jù)數(shù)組,是 n_samples * n_features 的二維 numpy.ndarray 數(shù)組
target:標(biāo)簽數(shù)組,是 n_samples 的一維 numpy.ndarray 數(shù)組
DESCR:數(shù)據(jù)描述
feature_names:特征名
target_names:標(biāo)簽名
數(shù)據(jù)集目錄可以通過datasets.get_data_home()獲取,clear_data_home(data_home=None)刪除所有下載數(shù)據(jù)
- datasets.get_data_home(data_home=None)
返回scikit學(xué)習(xí)數(shù)據(jù)目錄的路徑。這個文件夾被一些大的數(shù)據(jù)集裝載器使用,以避免下載數(shù)據(jù)。默認(rèn)情況下,數(shù)據(jù)目錄設(shè)置為用戶主文件夾中名為“scikit_learn_data”的文件夾。或者,可以通過“SCIKIT_LEARN_DATA”環(huán)境變量或通過給出顯式的文件夾路徑以編程方式設(shè)置它。'?'符號擴(kuò)展到用戶主文件夾。如果文件夾不存在,則會自動創(chuàng)建。
- sklearn.datasets.clear_data_home(data_home=None)
刪除存儲目錄中的數(shù)據(jù)
獲取小數(shù)據(jù)集
用于分類
- sklearn.datasets.load_iris
| 類別 | 3 |
| 特征 | 4 |
| 樣本數(shù)量 | 150 |
| 每個類別數(shù)量 | 50 |
- sklearn.datasets.load_digits
| 類別 | 10 |
| 特征 | 64 |
| 樣本數(shù)量 | 1797 |
用于回歸
- sklearn.datasets.load_boston
| 目標(biāo)類別 | 5-50 |
| 特征 | 13 |
| 樣本數(shù)量 | 506 |
- sklearn.datasets.load_diabetes
| 目標(biāo)范圍 | 25-346 |
| 特征 | 10 |
| 樣本數(shù)量 | 442 |
獲取大數(shù)據(jù)集
- sklearn.datasets.fetch_20newsgroups
- sklearn.datasets.fetch_20newsgroups_vectorized
獲取本地生成數(shù)據(jù)
生成本地分類數(shù)據(jù):
sklearn.datasets.make_classification
class make_classification(n_samples=100, n_features=20, n_informative=2, n_redundant=2, n_repeated=0, n_classes=2, n_clusters_per_class=2, weights=None, flip_y=0.01, class_sep=1.0, hypercube=True, shift=0.0, scale=1.0, shuffle=True, random_state=None) """ 生成用于分類的數(shù)據(jù)集:param n_samples:int,optional(default = 100),樣本數(shù)量:param n_features:int,可選(默認(rèn)= 20),特征總數(shù):param n_classes:int,可選(default = 2),類(或標(biāo)簽)的分類問題的數(shù)量:param random_state:int,RandomState實(shí)例或無,可選(默認(rèn)=無)如果int,random_state是隨機(jī)數(shù)生成器使用的種子; 如果RandomState的實(shí)例,random_state是隨機(jī)數(shù)生成器; 如果沒有,隨機(jī)數(shù)生成器所使用的RandomState實(shí)例np.random:return :X,特征數(shù)據(jù)集;y,目標(biāo)分類值 """
生成本地回歸數(shù)據(jù):
- sklearn.datasets.make_regression
二、模型的選擇
算法是核心,數(shù)據(jù)和計算是基礎(chǔ)。這句話很好的說明了機(jī)器學(xué)習(xí)中算法的重要性。那么我們開看下機(jī)器學(xué)習(xí)的幾種分類:
- 監(jiān)督學(xué)習(xí)
- 分類 k-近鄰算法、決策樹、貝葉斯、邏輯回歸(LR)、支持向量機(jī)(SVM)
- 回歸 線性回歸、嶺回歸
- 標(biāo)注 隱馬爾可夫模型(HMM)
- 無監(jiān)督學(xué)習(xí)
- 聚類 k-means
如何選擇合適的算法模型
在解決問題的時候,必須考慮下面兩個問題:一、使用機(jī)器學(xué)習(xí)算法的目的,想要算法完成何種任務(wù),比如是預(yù)測明天下雨的概率是對投票者按照興趣分組;二、需要分析或者收集的數(shù)據(jù)時什么
首先考慮使用機(jī)器學(xué)習(xí)算法的目的。如果想要預(yù)測目標(biāo)變量的值,則可以選擇監(jiān)督學(xué)習(xí)算法,否則可以選擇無監(jiān)督學(xué)習(xí)算法,確定選擇監(jiān)督學(xué)習(xí)算法之后,需要進(jìn)一步確定目標(biāo)變量類型,如果目標(biāo)變量是離散型,如是/否、1/2/3,A/B/C/或者紅/黑/黃等,則可以選擇分類算法;如果目標(biāo)變量是連續(xù)的數(shù)值,如0.0~100.0、-999~999等,則需要選擇回歸算法
如果不想預(yù)測目標(biāo)變量的值,則可以選擇無監(jiān)督算法。進(jìn)一步分析是否需要將數(shù)據(jù)劃分為離散的組。如果這是唯一的需求,則使用聚類算法。
當(dāng)然在大多數(shù)情況下,上面給出的選擇辦法都能幫助讀者選擇恰當(dāng)?shù)臋C(jī)器學(xué)習(xí)算法,但這也并非已成不變。也有分類算法可以用于回歸。
其次考慮的是數(shù)據(jù)問題,我們應(yīng)該充分了解數(shù)據(jù),對實(shí)際數(shù)據(jù)了解的越充分,越容易創(chuàng)建符合實(shí)際需求的應(yīng)用程序,主要應(yīng)該了解數(shù)據(jù)的一下特性:特征值是 離散型變量 還是 連續(xù)型變量 ,特征值中是否存在缺失的值,何種原因造成缺失值,數(shù)據(jù)中是夠存在異常值,某個特征發(fā)生的頻率如何,等等。充分了解上面提到的這些數(shù)據(jù)特性可以縮短選擇機(jī)器學(xué)習(xí)算法的時間。
監(jiān)督學(xué)習(xí)中三類問題的解釋
(1)分類問題分類是監(jiān)督學(xué)習(xí)的一個核心問題,在監(jiān)督學(xué)習(xí)中,當(dāng)輸出變量取有限個離散值時,預(yù)測問題變成為分類問題。這時,輸入變量可以是離散的,也可以是連續(xù)的。監(jiān)督學(xué)習(xí)從數(shù)據(jù)中學(xué)習(xí)一個分類模型活分類決策函數(shù),稱為分類器。分類器對新的輸入進(jìn)行輸出的預(yù)測,稱為分類。最基礎(chǔ)的便是二分類問題,即判斷是非,從兩個類別中選擇一個作為預(yù)測結(jié)果;除此之外還有多酚類的問題,即在多于兩個類別中選擇一個。
分類問題包括學(xué)習(xí)和分類兩個過程,在學(xué)習(xí)過程中,根據(jù)已知的訓(xùn)練數(shù)據(jù)集利用有效的學(xué)習(xí)方法學(xué)習(xí)一個分類器,在分類過程中,利用學(xué)習(xí)的分類器對新的輸入實(shí)例進(jìn)行分類。圖中(X1,Y1),(X2,Y2)...都是訓(xùn)練數(shù)據(jù)集,學(xué)習(xí)系統(tǒng)有訓(xùn)練數(shù)據(jù)學(xué)習(xí)一個分類器P(Y|X)或Y=f(X);分類系統(tǒng)通過學(xué)習(xí)到的分類器對于新輸入的實(shí)例子Xn+1進(jìn)行分類,即預(yù)測術(shù)其輸出的雷標(biāo)記Yn+1
分類在于根據(jù)其特性將數(shù)據(jù)“分門別類”,所以在許多領(lǐng)域都有廣泛的應(yīng)用。例如,在銀行業(yè)務(wù)中,可以構(gòu)建一個客戶分類模型,按客戶按照貸款風(fēng)險的大小進(jìn)行分類;在網(wǎng)絡(luò)安全領(lǐng)域,可以利用日志數(shù)據(jù)的分類對非法入侵進(jìn)行檢測;在圖像處理中,分類可以用來檢測圖像中是否有人臉出現(xiàn);在手寫識別中,分類可以用于識別手寫的數(shù)字;在互聯(lián)網(wǎng)搜索中,網(wǎng)頁的分類可以幫助網(wǎng)頁的抓取、索引和排序。
即一個分類應(yīng)用的例子,文本分類。這里的文本可以是新聞報道、網(wǎng)頁、電子郵件、學(xué)術(shù)論文。類別往往是關(guān)于文本內(nèi)容的。例如政治、體育、經(jīng)濟(jì)等;也有關(guān)于文本特點(diǎn)的,如正面意見、反面意見;還可以根據(jù)應(yīng)用確定,如垃圾郵件、非垃圾郵件等。文本分類是根據(jù)文本的特征將其劃分到已有的類中。輸入的是文本的特征向量,輸出的是文本的類別。通常把文本的單詞定義出現(xiàn)取值是1,否則是0;也可以是多值的,,表示單詞在文本中出現(xiàn)的頻率。直觀地,如果“股票”“銀行““貨幣”這些詞出現(xiàn)很多,這個文本可能屬于經(jīng)濟(jì)學(xué),如果“網(wǎng)球””比賽“”運(yùn)動員“這些詞頻繁出現(xiàn),這個文本可能屬于體育類
(2)回歸問題
回歸是監(jiān)督學(xué)習(xí)的另一個重要問題。回歸用于預(yù)測輸入變量和輸出變量之間的關(guān)系,特別是當(dāng)初如變量的值發(fā)生變化時,輸出變量的值隨之發(fā)生的變化。回歸模型正式表示從輸入到輸出變量之間映射的函數(shù)。回歸穩(wěn)日的學(xué)習(xí)等價與函數(shù)擬合:選擇一條函數(shù)曲線使其更好的擬合已知數(shù)據(jù)且很好的預(yù)測位置數(shù)據(jù)
回歸問題按照輸入變量的個數(shù),分為一元回歸和多元回歸;按照輸入變量和輸出變量之間關(guān)系的類型即模型的類型,分為線性回歸和非線性回歸。
許多領(lǐng)域的任務(wù)都可以形式化為回歸問題,比如,回歸可以用于商務(wù)領(lǐng)域,作為市場趨勢預(yù)測、產(chǎn)品質(zhì)量管理、客戶滿意度調(diào)查、偷襲風(fēng)險分析的工具。
(3)標(biāo)注問題
標(biāo)注也是一個監(jiān)督學(xué)習(xí)問題。可以認(rèn)為標(biāo)注問題是分類問題的一個推廣,標(biāo)注問題又是更復(fù)雜的結(jié)構(gòu)預(yù)測問題的簡單形式。標(biāo)注問題的輸入是一個觀測序列,輸出是一個標(biāo)記序列或狀態(tài)序列。標(biāo)注問題在信息抽取、自然語言處理等領(lǐng)域廣泛應(yīng)用,是這些領(lǐng)域的基本問題。例如,自然語言處理的詞性標(biāo)注就是一個典型的標(biāo)注,即對一個單詞序列預(yù)測其相應(yīng)的詞性標(biāo)記序
當(dāng)然我們主要關(guān)注的是分類和回歸問題,并且標(biāo)注問題的算法復(fù)雜
三、模型檢驗(yàn)-交叉驗(yàn)證
一般在進(jìn)行模型的測試時,我們會將數(shù)據(jù)分為訓(xùn)練集和測試集。在給定的樣本空間中,拿出大部分樣本作為訓(xùn)練集來訓(xùn)練模型,剩余的小部分樣本使用剛建立的模型進(jìn)行預(yù)測。
訓(xùn)練集與測試集
訓(xùn)練集與測試集的分割可以使用cross_validation中的train_test_split方法,大部分的交叉驗(yàn)證迭代器都內(nèi)建一個劃分?jǐn)?shù)據(jù)前進(jìn)行數(shù)據(jù)索引打散的選項(xiàng),train_test_split 方法內(nèi)部使用的就是交叉驗(yàn)證迭代器。默認(rèn)不會進(jìn)行打散,包括設(shè)置cv=some_integer(直接)k折疊交叉驗(yàn)證的cross_val_score會返回一個隨機(jī)的劃分。如果數(shù)據(jù)集具有時間性,千萬不要打散數(shù)據(jù)再劃分!
- sklearn.cross_validation.train_test_split
上面的方式也有局限。因?yàn)橹贿M(jìn)行一次測試,并不一定能代表模型的真實(shí)準(zhǔn)確率。因?yàn)?#xff0c;模型的準(zhǔn)確率和數(shù)據(jù)的切分有關(guān)系,在數(shù)據(jù)量不大的情況下,影響尤其突出。所以還需要一個比較好的解決方案。
模型評估中,除了訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù),還會涉及到驗(yàn)證數(shù)據(jù)。使用訓(xùn)練數(shù)據(jù)與測試數(shù)據(jù)進(jìn)行了交叉驗(yàn)證,只有這樣訓(xùn)練出的模型才具有更可靠的準(zhǔn)確率,也才能期望模型在新的、未知的數(shù)據(jù)集上,能有更好的表現(xiàn)。這便是模型的推廣能力,也即泛化能力的保證。
holdout method
評估模型泛化能力的典型方法是holdout交叉驗(yàn)證(holdout cross validation)。holdout方法很簡單,我們只需要將原始數(shù)據(jù)集分割為訓(xùn)練集和測試集,前者用于訓(xùn)練模型,后者用于評估模型的性能。一般來說,Holdout 驗(yàn)證并非一種交叉驗(yàn)證,因?yàn)閿?shù)據(jù)并沒有交叉使用。 隨機(jī)從最初的樣本中選出部分,形成交叉驗(yàn)證數(shù)據(jù),而剩余的就當(dāng)做訓(xùn)練數(shù)據(jù)。 一般來說,少于原本樣本三分之一的數(shù)據(jù)被選做驗(yàn)證數(shù)據(jù)。所以這種方法得到的結(jié)果其實(shí)并不具有說服性
k-折交叉驗(yàn)證
K折交叉驗(yàn)證,初始采樣分割成K個子樣本,一個單獨(dú)的子樣本被保留作為驗(yàn)證模型的數(shù)據(jù),其他K-1個樣本用來訓(xùn)練。交叉驗(yàn)證重復(fù)K次,每個子樣本驗(yàn)證一次,平均K次的結(jié)果或者使用其它結(jié)合方式,最終得到一個單一估測。這個方法的優(yōu)勢在于,同時重復(fù)運(yùn)用隨機(jī)產(chǎn)生的子樣本進(jìn)行訓(xùn)練和驗(yàn)證,每次的結(jié)果驗(yàn)證一次,10折交叉驗(yàn)證是最常用的。
例如5折交叉驗(yàn)證,全部可用數(shù)據(jù)集分成五個集合,每次迭代都選其中的1個集合數(shù)據(jù)作為驗(yàn)證集,另外4個集合作為訓(xùn)練集,經(jīng)過5組的迭代過程。交叉驗(yàn)證的好處在于,可以保證所有數(shù)據(jù)都有被訓(xùn)練和驗(yàn)證的機(jī)會,也盡最大可能讓優(yōu)化的模型性能表現(xiàn)的更加可信。
使用交叉驗(yàn)證的最簡單的方法是在估計器和數(shù)據(jù)集上使用cross_val_score函數(shù)。
- sklearn.cross_validation.cross_val_score
使用交叉驗(yàn)證方法的目的主要有2個:
- 從有限的學(xué)習(xí)數(shù)據(jù)中獲取盡可能多的有效信息;
- 可以在一定程度上避免過擬合問題。
四、estimator的工作流程
在sklearn中,估計器(estimator)是一個重要的角色,分類器和回歸器都屬于estimator。在估計器中有有兩個重要的方法是fit和transform。
- fit方法用于從訓(xùn)練集中學(xué)習(xí)模型參數(shù)
- transform用學(xué)習(xí)到的參數(shù)轉(zhuǎn)換數(shù)據(jù)
總結(jié)
以上是生活随笔為你收集整理的机器学习:sklearn数据集与机器学习组成的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python mysql返回,pytho
- 下一篇: Flask基础知识总结