7 數據集加載工具?
sklearn.datasets
模塊嵌入了“ 入門“部分介紹的一些小型玩具數據集。
該模塊還具有幫助用戶獲取大型數據集的功能,這些數據集通常由機器學習社區用來模擬“現實世界”的數據來進行算法測試。
為了控制數據統計特性(通常是特征的相關性和信息性)的同時評估數據集規模(n_samples
和 n_features
)的影響,還可以生成綜合數據集。
7.1 通用數據集
根據所需的數據集類型,可以使用三個主要的數據集接口來獲取數據集。
The dataset loaders(數據集加載器)。它們可用于加載小的標準數據集,如“ 玩具數據集”部分所述。
The dataset fetchers(數據集提取程序)。它們可用于下載和加載更大的數據集,如“ 現實世界數據集”部分所述。
loaders和fetchers的函數返回一個sklearn.utils.Bunch
對象,這個對象至少包含兩個部分:一部分是n_samples
* n_features
的數據框,與鍵data
(除了20個新聞組的數據集)對應;另一個是包含有目標值的長度等于n_samples
的數組,與鍵target
對應。
Bunch對象是一個字典,它的鍵是屬性。有關Bunch對象的更多信息,請參見sklearn.utils.Bunch
。
通過將return_X_y
參數設置為True,幾乎所有這些函數還可以將輸出約束為僅包含特征數據和目標的元組。
數據集的DESCR
屬性中還包含完整的說明,其中一些包含feature_names
和target_names
。有關詳細信息,請參見下面的數據集描述。
The dataset generation functions(數據集生成函數)。它們可用于生成受控的合成數據集,如“ 生成的數據集”部分所述。
這些函數返回一個元組(X, y)
,該元組由一個n_samples
*n_features
的 numpy數組X
和一個 包含目標的長度為n_samples
的數組y
組成。
此外,還有其他工具可用于加載其他格式或從其他位置加載數據集,如“ 加載其他數據集” 部分所述。
7.2 玩具數據集
scikit-learn帶有一些小的標準數據集,不需要從某些外部網站下載任何文件。
可以使用以下功能加載它們:
函數 | 返回 |
---|---|
load_boston (*[, return_X_y]) |
加載并返回波士頓房價數據集(回歸)。 |
load_iris (*[, return_X_y, as_frame]) |
加載并返回鳶尾花數據集(分類)。 |
load_diabetes (*[, return_X_y, as_frame]) |
加載并返回糖尿病數據集(回歸)。 |
load_digits (*[, n_class, return_X_y, as_frame]) |
加載并返回數字數據集(分類)。 |
load_linnerud (*[, return_X_y, as_frame]) |
加載并返回linnerud物理鍛煉數據集。 |
load_wine (*[, return_X_y, as_frame]) |
加載并返回葡萄酒數據集(分類)。 |
load_breast_cancer (*[, return_X_y, as_frame]) |
加載并返回威斯康星州乳腺癌數據集(分類)。 |
這些數據集可用于快速說明scikit-learn中實現的各種算法的行為。但是,
7.2.1 波士頓房價數據集
數據集特征:
實例數 | 506 |
---|---|
屬性數量 | 13個數值/分類特征,房價中位數(特征14)是標簽。 |
屬性信息(按順序) | - CRIM 按城鎮劃分的人均犯罪率 - ZN 比例超過25,000平方英尺的住宅用地比例。 - INDUS 每個城鎮非零售業務英畝的比例 - CHAS 查爾斯河虛擬變量(如果邊界是河流,則為1;否則為0) - NOX 一氧化氮濃度(百萬分之幾) - RM 每個住宅的平均房間數 - AGE 1940年之前建造的自有住房的年齡比例 - DIS 與五個波士頓就業中心的加權距離 - RAD 高速公路通行能力指數 - TAX 每10,000美元的稅全額財產稅稅率 - PTRATIO 按鎮劃分的師生比率 - B 1000(Bk-0.63)^ 2 其中Bk是按城鎮劃分的黑人比例 - LSTAT 人口地位降低百分比 - MEDV 自有住房的價值中位數(以1000美元計) |
缺失值 | 無 |
創作者 | Harrison, D. and Rubinfeld, D.L. |
這是UCI ML住房數據集的副本。 https://archive.ics.uci.edu/ml/machine-learning-databases/housing/
該數據集取自卡內基梅隆大學維護的StatLib庫。
波士頓房價數據出現在哈里森(Harrison)和魯賓菲爾德(Rubinfeld)的“Hedonic prices and the demand for clean air”,1978年 J. Environ. Economics & Management,第5卷,第81-102頁 。后被Belsley,Kuh和Welsch用在“ Regression diagnostics … ”, Wiley, 1980. N.B. Various 。注意后者的244-261頁上的表格中的數據是經過轉換的。
波士頓房價數據已用于許多解決回歸問題的機器學習論文中。
參考文獻
Belsley, Kuh & Welsch, ‘Regression diagnostics: Identifying Influential Data and Sources of Collinearity’, Wiley, 1980. 244-261. Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.
7.2.2 鳶尾花植物數據集
數據集特征:
實例數 | 150(三類各50個) |
---|---|
屬性數量 | 4個數值,預測屬性和類別 |
屬性信息 | - 萼片長度(厘米) - 萼片寬度(厘米) - 花瓣長度(厘米) - 花瓣寬度(厘米) - 類: 鳶尾花 鳶尾花 鳶尾花 |
統計摘要 | ![]() |
缺失值 | 無 |
類別分布 | 3個類別中的每類別占33.3%。 |
創作者 | R.A. Fisher |
捐贈者 | Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov) |
日期 | 1988年7月 |
著名的鳶尾花數據,最早由 R.A. Fisher 爵士使用。該數據集摘自Fisher的論文。請注意,它與R中的相同,但與UCI機器學習存儲庫中的不同,后者具有兩個錯誤的數據點。
這也許是模式識別文獻中最著名的數據庫。Fisher的論文是該領域的經典著作,至今仍被頻繁引用(請參見Duda&Hart)。數據集包含3類,每類50個實例,其中每個類都屬于一種鳶尾花。一類與其他兩類可線性分離;后者與其他的類別不能線性分離。
參考文獻
Fisher, R.A. “The use of multiple measurements in taxonomic problems” Annual Eugenics, 7, Part II, 179-188 (1936); also in “Contributions to Mathematical Statistics” (John Wiley, NY, 1950). Duda, R.O., & Hart, P.E. (1973) Pattern Classification and Scene Analysis. (Q327.D83) John Wiley & Sons. ISBN 0-471-22361-1. See page 218. Dasarathy, B.V. (1980) “Nosing Around the Neighborhood: A New System Structure and Classification Rule for Recognition in Partially Exposed Environments”. IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. PAMI-2, No. 1, 67-71. Gates, G.W. (1972) “The Reduced Nearest Neighbor Rule”. IEEE Transactions on Information Theory, May 1972, 431-433. See also: 1988 MLC Proceedings, 54-64. Cheeseman et al”s AUTOCLASS II conceptual clustering system finds 3 classes in the data. Many, many more …
7.2.3 糖尿病數據集
從442名糖尿病患者中獲取每位的年齡,性別,體重指數,平均血壓和六次血清測量值,共十個基線變量,以及一年后疾病進展的定量測量指標。
數據集特征:
實例數 | 442 |
---|---|
特征數量 | 前10列是數字測量值 |
標簽 | 第11列是基線后一年疾病進展的定量測量 |
特征信息 | 年齡(歲) 性別 體重指數 bp平均血壓 s1 tc,T細胞(一種白細胞) s2 ldl,低密度脂蛋白 s3 hdl,高密度脂蛋白 s4 tch,甲狀腺刺激激素 S5 LTG,拉莫三嗪 s6 glu,血糖水平 |
注意:這10個特征變量中的每一個都以平均值為中心,并按標準偏差乘以 n_samples
(即每列總和的平方和1)進行縮放。
源URL:https : //www4.stat.ncsu.edu/~boos/var.select/diabetes.html
更多相關信息,請參見: Bradley Efron, Trevor Hastie, Iain Johnstone and Robert Tibshirani (2004) “Least Angle Regression,” Annals of Statistics (with discussion), 407-499. (https://web.stanford.edu/~hastie/Papers/LARS/LeastAngle_2002.pdf)
7.2.4 手寫數字數據集的光學識別
數據集特征:
實例數 | 5620 |
---|---|
屬性數量 | 64 |
屬性信息 | 范圍為0..16的整數像素的8x8圖像。 |
缺失值 | 無 |
創作者 | Alpaydin (alpaydin ‘@’ boun.edu.tr) |
日期 | 1998年7月 |
這是UCI ML手寫數字數據集測試集的副本 https://archive.ics.uci.edu/ml/datasets/Optical+Recognition+of+Handheld+Digits
數據集包含手寫數字的圖像:10個類別,每個類別均指一個數字。
NIST提供的預處理程序用于從預印表格中提取手寫數字的標準化位圖。在總共43個人中,有30個人參與了培訓,而有13個人參與了測試。將32x32位圖劃分為4x4的非重疊塊,并在每個塊中統計像素點的數量。這將生成8x8的輸入矩陣,其中每個元素都是0..16范圍內的整數。這降低了尺寸并且產生了小的變形。
有關NIST預處理例程的信息,請參見 M. D. Garris, J. L. Blue, G. T. Candela, D. L. Dimmick, J. Geist, P. J. Grother, S. A. Janet, and C. L. Wilson, NIST Form-Based Handprint Recognition System, NISTIR 5469, 1994.
參考文獻
C. Kaynak (1995) Methods of Combining Multiple Classifiers and Their Applications to Handwritten Digit Recognition, MSc Thesis, Institute of Graduate Studies in Science and Engineering, Bogazici University.
Alpaydin, C. Kaynak (1998) Cascading Classifiers, Kybernetika. Ken Tang and Ponnuthurai N. Suganthan and Xi Yao and A. Kai Qin. Linear dimensionalityreduction using relevance weighted LDA. School of Electrical and Electronic Engineering Nanyang Technological University. 2005. Claudio Gentile. A New Approximate Maximal Margin Classification Algorithm. NIPS. 2000.
7.2.5 Linnerrud(林納魯德)數據集
數據集特征:
實例數 | 20 |
---|---|
屬性數量 | 3 |
缺失值 | 無 |
Linnerrud數據集是一個多輸出回歸數據集。它包括從健身俱樂部的二十名中年男子中收集的三個運動(data)和三個生理(target)變量:
生理-CSV包含對3個生理變量的20個觀察值:
? 體重,腰圍和脈搏。
運動-CSV包含對3個運動變量的20個觀察值:
? 下巴,仰臥起坐和跳躍。
參考文獻
Tenenhaus, M. (1998). La regression PLS: theorie et pratique. Paris: Editions Technic.
7.2.6 葡萄酒數據集
數據集特征:
實例數 | 178(3類各50個) |
---|---|
屬性數量 | 13個數值,預測屬性和類別 |
屬性信息 | - 醇 - 蘋果酸 - 灰 - 灰的堿度 - 鎂 - 總酚 - 類黃酮 - 非類黃酮酚 - 原花青素 - 色彩強度 - 色調 - 稀釋酒的OD280 / OD315 - 脯氨酸 - 類別: class_0 class_1 class_2 |
統計摘要 | ![]() |
缺失值 | 無 |
類別分布 | class_0(59),class_1(71),class_2(48) |
創作者 | R.A. Fisher |
捐贈者 | Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov) |
日期 | 1988年7月 |
這是UCI ML Wine識別數據集的副本。 https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data
數據是由三個不同的種植者對意大利同一地區種植的葡萄酒進行化學分析的結果。對于這三種葡萄酒中的不同成分,進行了十三項不同的測量。
原始所有者:
Forina, M. et al, PARVUS - An Extendible Package for Data Exploration, Classification and Correlation. Institute of Pharmaceutical and Food Analysis and Technologies, Via Brigata Salerno, 16147 Genoa, Italy.
引文:
Lichman, M. (2013). UCI Machine Learning Repository [https://archive.ics.uci.edu/ml]. Irvine, CA: University of California, School of Information and Computer Science.
參考文獻
(1) S. Aeberhard, D. Coomans and O. de Vel, Comparison of Classifiers in High Dimensional Settings, Tech. Rep. no. 92-02, (1992), Dept. of Computer Science and Dept. of Mathematics and Statistics, James Cook University of North Queensland. (Also submitted to Technometrics).
The data was used with many others for comparing various classifiers. The classes are separable, though only RDA has achieved 100% correct classification. (RDA : 100%, QDA 99.4%, LDA 98.9%, 1NN 96.1% (z-transformed data)) (All results using the leave-one-out technique)
(2) S. Aeberhard, D. Coomans and O. de Vel, “THE CLASSIFICATION PERFORMANCE OF RDA” Tech. Rep. no. 92-01, (1992), Dept. of Computer Science and Dept. of Mathematics and Statistics, James Cook University of North Queensland. (Also submitted to Journal of Chemometrics).
7.2.7 威斯康星州乳腺癌(診斷)數據集
數據集特征:
實例數 | 569 |
---|---|
屬性數量 | 30個數值型預測屬性和1個類別標簽 |
屬性信息 | - 半徑(從中心到周長上的點的距離的平均值) - 紋理(灰度值的標準差) - 周長 - 面積 - 平滑度(半徑長度的局部變化) - 緊密度(周長*周長 /面積-1.0) - 凹度(輪廓凹陷的嚴重程度) - 凹點(輪廓的凹入部分的數量) - 對稱 - 分形維數(“海岸線近似”-1) 為每個圖像計算這些特征的平均值,標準和“最差”(最大值),從而得到30個特征。 例如,字段0是平均半徑,字段10是半徑標準差,字段20是最差半徑。 標簽分類: -- WDBC-惡性 -- WDBC-良性 |
統計摘要 | ![]() |
缺失值 | 無 |
類別分布 | 212-惡性,357-良性 |
創作者 | Dr. William H. Wolberg, W. Nick Street, Olvi L. Mangasarian |
捐贈者 | Nick Street |
日期 | 1995年11月 |
這是UCI ML威斯康星州(診斷)乳腺癌數據集的副本。 https://goo.gl/U2Uwz2
從乳腺腫塊的細針抽吸(FNA)的數字化圖像計算特征。它們描述了圖像中存在的細胞核的特征。
上述分離平面是使用多表面方法樹(MSM-T) [K. P. Bennett, “Decision Tree Construction Via Linear Programming.” Proceedings of the 4th Midwest Artificial Intelligence and Cognitive Science Society, pp. 97-101, 1992] ,一種使用線性規劃構建決策樹的分類方法。在1-4個特征和1-3個分離平面的空間中使用詳盡搜索選擇相關特征。
用于獲得3維空間中分離平面的實際線性程序的描述如下: [K. P. Bennett and O. L. Mangasarian: “Robust Linear Programming Discrimination of Two Linearly Inseparable Sets”, Optimization Methods and Software 1, 1992, 23-34].
該數據庫也可以通過UW CS ftp服務器獲得:
ftp ftp.cs.wisc.edu cd math-prog/cpo-dataset/machine-learn/WDBC/
參考文獻
W.N. Street, W.H. Wolberg and O.L. Mangasarian. Nuclear feature extraction for breast tumor diagnosis. IS&T/SPIE 1993 International Symposium on Electronic Imaging: Science and Technology, volume 1905, pages 861-870, San Jose, CA, 1993. O.L. Mangasarian, W.N. Street and W.H. Wolberg. Breast cancer diagnosis and prognosis via linear programming. Operations Research, 43(4), pages 570-577, July-August 1995. W.H. Wolberg, W.N. Street, and O.L. Mangasarian. Machine learning techniques to diagnose breast cancer from fine-needle aspirates. Cancer Letters 77 (1994) 163-171.
7.3 現實世界的數據集
scikit-learn提供了加載較大數據集的工具,必要時可以下載它們。
可以使用以下函數加載它們:
函數 | 說明 |
---|---|
fetch_olivetti_faces (*[, data_home, …]) |
從AT&T(分類)中加載Olivetti人臉數據集。 |
fetch_20newsgroups (*[, data_home, subset, …]) |
從20個新聞組數據集中加載文件名和數據(分類)。 |
fetch_20newsgroups_vectorized (*[, subset, …]) |
加載20個新聞組數據集并將其矢量化為令牌計數(分類)。 |
fetch_lfw_people (*[, data_home, funneled, …]) |
將標簽的面孔加載到Wild(LFW)人數據集中(分類)。 |
fetch_lfw_pairs (*[, subset, data_home, …]) |
在“Wild(LFW)”對數據集中加載標簽的面部(分類)。 |
fetch_covtype (*[, data_home, …]) |
加載covertype(植被型數據集)數據集(分類)。 |
fetch_rcv1 (*[, data_home, subset, …]) |
加載RCV1多標簽數據集(分類)。 |
fetch_kddcup99 (*[, subset, data_home, …]) |
加載kddcup99(網絡入侵檢測)數據集(分類)。 |
fetch_california_housing (*[, data_home, …]) |
加載加利福尼亞住房數據集(回歸)。 |
7.3.1 Olivetti人臉數據集
該數據集包含 1992年4月至1994年4月之間在AT&T劍橋實驗室拍攝的一組面部圖像。sklearn.datasets.fetch_olivetti_faces
函數是數據獲取/緩存功能,可從AT&T下載數據存檔。
如原始網站所述:
40個不同主題,每一個主題都有十張不同的圖像。對于某些對象,圖像是在不同的時間拍攝的,光線,面部表情(睜開/閉合的眼睛,微笑/不微笑)和面部細節(眼鏡/不戴眼鏡)均不同。所有圖像都是在深色均勻背景下拍攝的,對象處于直立的,正面的位置(允許某些側向移動)。
數據集特征:
類別 | 40 |
---|---|
樣品總數 | 400 |
維數 | 4096 |
特征 | 實數,介于0和1之間 |
圖像被量化為256灰度級并存儲為無符號的8位整數。加載程序會將這些值轉換為[0,1]區間內的浮點值,對于許多算法而言,它們更易于使用。
該數據庫的“類別標簽”是從0到39的整數,表示被攝人物的身份。但是,每個類只有10個示例,從無監督或半監督的角度來看,這個相對較小的數據集更加有趣。
原始數據集包含92 x 112,而這里的版本是64x64的圖像。
能使用這些圖像,請歸功于AT&T劍橋實驗室。
7.3.2 20個新聞組文本數據集
20個新聞組數據集,包括關于20個主題的大約18000個新聞帖子,分為兩個子集:一個用于訓練(或開發),另一個用于測試(或性能評估)。訓練集和測試集之間的劃分基于特定日期之前和之后發布的消息。
該模塊包含兩個加載程序。第一個 sklearn.datasets.fetch_20newsgroups
返回原始文本列表,這些原始文本可以饋送到文本特征提取器(例如sklearn.feature_extraction.text.CountVectorizer
使用自定義參數),以提取特征向量。第二個是sklearn.datasets.fetch_20newsgroups_vectorized
返回可用的特征,而不必使用特征提取器。
數據集特征:
類別 | 20 |
---|---|
樣本總數 | 18846 |
維數 | 1個 |
特征 | 文本 |
7.3.2.1 用法
sklearn.datasets.fetch_20newsgroups
函數是一種數據獲取/緩存函數,可從原始的20個新聞組網站下載數據存檔,提取~/scikit_learn_data/20news_home
文件夾中的存檔內容,然后調用sklearn.datasets.load_files
訓練或測試集文件夾,或同時調用兩者:
>>> from sklearn.datasets import fetch_20newsgroups
>>> newsgroups_train = fetch_20newsgroups(subset='train')
>>> from pprint import pprint
>>> pprint(list(newsgroups_train.target_names))
['alt.atheism',
'comp.graphics',
'comp.os.ms-windows.misc',
'comp.sys.ibm.pc.hardware',
'comp.sys.mac.hardware',
'comp.windows.x',
'misc.forsale',
'rec.autos',
'rec.motorcycles',
'rec.sport.baseball',
'rec.sport.hockey',
'sci.crypt',
'sci.electronics',
'sci.med',
'sci.space',
'soc.religion.christian',
'talk.politics.guns',
'talk.politics.mideast',
'talk.politics.misc',
'talk.religion.misc']
實際數據位于filenames
和target
屬性中。目標標簽是代表類別的整數:
>>> newsgroups_train.filenames.shape
(11314,)
>>> newsgroups_train.target.shape
(11314,)
>>> newsgroups_train.target[:10]
array([ 7, 4, 4, 1, 14, 16, 13, 3, 2, 4])
通過將要加載的類別列表傳遞給sklearn.datasets.fetch_20newsgroups
函數,可以僅加載類別的某個子集 :
>>> cats = ['alt.atheism', 'sci.space']
>>> newsgroups_train = fetch_20newsgroups(subset='train', categories=cats)
>>> list(newsgroups_train.target_names)
['alt.atheism', 'sci.space']
>>> newsgroups_train.filenames.shape
(1073,)
>>> newsgroups_train.target.shape
(1073,)
>>> newsgroups_train.target[:10]
array([0, 1, 1, 1, 0, 1, 1, 0, 0, 0])
7.3.2.2 將文本轉換為向量
為了將文本數據用于預測或聚類模型,首先需要將文本轉換為適合統計分析的數值向量。如以下示例所示,可以使用sklearn.feature_extraction.text
模塊來實現此目的,該模塊從20個新聞組數據的訓練集中提取TF-IDF向量:
>>> from sklearn.feature_extraction.text import TfidfVectorizer
>>> categories = ['alt.atheism', 'talk.religion.misc',
... 'comp.graphics', 'sci.space']
>>> newsgroups_train = fetch_20newsgroups(subset='train',
... categories=categories)
>>> vectorizer = TfidfVectorizer()
>>> vectors = vectorizer.fit_transform(newsgroups_train.data)
>>> vectors.shape
(2034, 34118)
提取的TF-IDF向量非常稀疏,在超過30000維的空間(不到0.5%的非零特征)中,平均每個樣本有159個非零分量:
>>> vectors.nnz / float(vectors.shape[0])
159.01327...
sklearn.datasets.fetch_20newsgroups_vectorized
是一個返回即用型令牌計數特征而不是文件名的函數。
7.3.2.3 過濾文本以進行更實際的訓練
對于分類器來說,很容易在20個新聞組數據中出現的特定內容(如新聞組標題)上過度匹配。許多分類器得到的F分數都很高,但對于不在此時間范圍內的其他文檔上表現的很糟糕。
例如,讓我們看看多項式樸素貝葉斯分類器的結果,該分類器可以快速訓練并獲得不錯的F分數:
>>> from sklearn.naive_bayes import MultinomialNB
>>> from sklearn import metrics
>>> newsgroups_test = fetch_20newsgroups(subset='test',
... categories=categories)
>>> vectors_test = vectorizer.transform(newsgroups_test.data)
>>> clf = MultinomialNB(alpha=.01)
>>> clf.fit(vectors, newsgroups_train.target)
MultinomialNB(alpha=0.01, class_prior=None, fit_prior=True)
>>> pred = clf.predict(vectors_test)
>>> metrics.f1_score(newsgroups_test.target, pred, average='macro')
0.88213...
(使用稀疏特征的文本文檔分類示例打亂了訓練集和測試集,而不是按時間分段,在這種情況下,多項式樸素貝葉斯的F分數更高,為0.88。你是否對該分類器內部發生的事情感到懷疑?)
讓我們來看看最有用的特征是什么:
>>> import numpy as np
>>> def show_top10(classifier, vectorizer, categories):
... feature_names = np.asarray(vectorizer.get_feature_names())
... for i, category in enumerate(categories):
... top10 = np.argsort(classifier.coef_[i])[-10:]
... print("%s: %s" % (category, " ".join(feature_names[top10])))
...
>>> show_top10(clf, vectorizer, newsgroups_train.target_names)
alt.atheism: edu it and in you that is of to the
comp.graphics: edu in graphics it is for and of to the
sci.space: edu it that is in and space to of the
talk.religion.misc: not it you in is that and to of the
現在,您可以看到許多特征引起過擬合的情況:
幾乎每個組都通過諸如 NNTP-Posting-Host:
和的標頭Distribution:
或多或少地出現來區分 。另一個重要特征涉及發件人是否隸屬于大學,這可以從他們的標題或簽名中看出 。 “article”一詞是一個重要的特征,它基于人們引用以前文章的頻率,如:“在文章[文章ID]中,[名稱] <[電子郵件地址]>寫道:” 其他特征與當時正在發布的特定人員的姓名和電子郵件地址匹配。
憑借如此豐富的區分新聞組的線索,分類器根本無需從文本中識別主題,而且它們都表現出相同的高水平。
因此,加載20個新聞組數據的函數提供了一個稱為remove的參數,限定要從每個文件中刪除哪些信息。remove應該是包含在任何子集中的一個元組('headers', 'footers', 'quotes')
,可以分別刪除標頭,簽名塊和引號塊。
>>> newsgroups_test = fetch_20newsgroups(subset='test',
... remove=('headers', 'footers', 'quotes'),
... categories=categories)
>>> vectors_test = vectorizer.transform(newsgroups_test.data)
>>> pred = clf.predict(vectors_test)
>>> metrics.f1_score(pred, newsgroups_test.target, average='macro')
0.77310...
這個分類器失去了很多F分數,只是因為我們刪除了與主題分類無關的元數據。如果我們還從訓練數據中刪除此元數據,則損失會更大:
>>> newsgroups_train = fetch_20newsgroups(subset='train',
... remove=('headers', 'footers', 'quotes'),
... categories=categories)
>>> vectors = vectorizer.fit_transform(newsgroups_train.data)
>>> clf = MultinomialNB(alpha=.01)
>>> clf.fit(vectors, newsgroups_train.target)
MultinomialNB(alpha=0.01, class_prior=None, fit_prior=True)
>>> vectors_test = vectorizer.transform(newsgroups_test.data)
>>> pred = clf.predict(vectors_test)
>>> metrics.f1_score(newsgroups_test.target, pred, average='macro')
0.76995...
其他一些分類器可以更好地應對此較難的任務。可以嘗試運行用于文本特征提取和評估的示例,選擇使用和不使用--filter
選項來比較結果。
建議 |
---|
當評估20個新聞組數據上的文本分類器時,應刪除與新聞組相關的元數據。在scikit-learn中,您可以通過設置remove=('headers', 'footers', 'quotes') 來做到這一點。F分數將較低,但是它更符合實際。 |
例子 |
---|
用于文本特征提取和評估的示例 使用稀疏特征對文本文檔進行分類 |
7.3.3 Wild人臉識別數據集中的標簽人臉
該數據集是通過互聯網收集的名人的 JPEG 圖片的集合,所有詳細信息都可以在官方網站上找到:http://vis-www.cs.umass.edu/lfw/
每張圖片均以一張臉為中心。典型的任務稱為人臉驗證:給定一對兩張圖片,二進制分類器必須預測這兩個圖片是否來自同一個人。
另一種任務是“人臉驗證”或“人臉識別”:給定未知人物的面部圖片,通過參考先前看到的已識別人物圖片庫來識別人物姓名。
人臉驗證和人臉識別都是典型的任務,都是在一個經過訓練的模型的輸出上執行的。最流行的人臉檢測模型稱為Viola-Jones,在OpenCV庫中實現。 該人臉檢測器從各種網絡中提取LFW人臉圖片。
數據集特征:
類別 | 5749 |
---|---|
樣本總數 | 13233 |
維數 | 5828 |
特征 | 實數,介于0和255之間 |
7.3.3.1 用法
scikit-learn
提供了兩個加載程序,這些加載程序將自動下載,緩存,解析元數據文件,解碼jpeg并將感興趣的部分轉換為映射的numpy數組。該數據集的大小大于200 MB。第一次加載通常需要花費幾分鐘以上的時間才能將JPEG文件的相關部分完全解碼為numpy數組。如果數據集已被加載一次,則通過使用joblib
緩存~/scikit_learn_data/lfw_home/
文件夾中的映射版本,以下兩次的加載時間少于200ms 。
第一個加載程序用于人臉識別任務:多類分類任務(因此有監督學習):
>>> from sklearn.datasets import fetch_lfw_people
>>> lfw_people = fetch_lfw_people(min_faces_per_person=70, resize=0.4)
>>> for name in lfw_people.target_names:
... print(name)
...
Ariel Sharon
Colin Powell
Donald Rumsfeld
George W Bush
Gerhard Schroeder
Hugo Chavez
Tony Blair
默認切片是臉部周圍的矩形,會刪除大部分背景:
>>> lfw_people.data.dtype
dtype('float32')
>>> lfw_people.data.shape
(1288, 1850)
>>> lfw_people.images.shape
(1288, 50, 37)
1140
個面孔都唯一的對應到target
數組中的一個人的ID :
>>> lfw_people.target.shape
(1288,)
>>> list(lfw_people.target[:10])
[5, 6, 3, 1, 0, 1, 3, 4, 3, 0]
第二個加載器通常用于面部驗證任務:每個樣本都是一對屬于或不屬于同一個人的兩張圖片:
>>> from sklearn.datasets import fetch_lfw_pairs
>>> lfw_pairs_train = fetch_lfw_pairs(subset='train')
>>> list(lfw_pairs_train.target_names)
['Different persons', 'Same person']
>>> lfw_pairs_train.pairs.shape
(2200, 2, 62, 47)
>>> lfw_pairs_train.data.shape
(2200, 5828)
>>> lfw_pairs_train.target.shape
(2200,)
對于sklearn.datasets.fetch_lfw_people
和 sklearn.datasets.fetch_lfw_pairs
函數,都可以通過傳遞color=True
來獲得RGB顏色通道的附加維度,在這種情況下,數據形狀將為 (2200, 2, 62, 47, 3)
sklearn.datasets.fetch_lfw_pairs
的數據集被細分成3個子集:train
訓練集,test
測試集和10_folds
評估集,這意味著使用10倍交叉驗證方案來計算性能指標。
參考文獻:
Labeled Faces in the Wild: A Database for Studying Face Recognition in Unconstrained Environments. Gary B. Huang, Manu Ramesh, Tamara Berg, and Erik Learned-Miller. University of Massachusetts, Amherst, Technical Report 07-49, October, 2007.
7.3.3.2 例子
7.3.4 森林覆蓋類型數據集
該數據集中的每個樣本對應于美國30m×30m的森林斑塊,是為了預測每個斑塊的覆蓋類型(即樹木的主要樹種)而收集的。有七個覆蓋類型,這使其成為多類分類問題。每個樣本都有54個特征,在數據集的首頁上進行了介紹 。其中一些特征是布爾類型,而其他特征則是離散或連續的測量值。
數據集特征:
類別 | 7 |
---|---|
樣本總數 | 581012 |
維數 | 54 |
特征 | 整型 |
sklearn.datasets.fetch_covtype
將加載森林覆蓋類型數據集,它返回一個類似于字典的對象,其data
參數對應特征矩陣,目標值位于target
。如有必要,將從網絡上下載數據集。
7.3.5 RCV1數據集
路透社語料庫第一卷(RCV1)是一個由路透社有限公司為研究目的提供的超過80萬個手動分類的新聞報道的檔案。該數據集在[1]中進行了詳細描述。
數據集特征:
類別 | 103 |
---|---|
樣本總數 | 804414 |
維數 | 47236 |
特征 | 實數,介于0和1之間 |
sklearn.datasets.fetch_rcv1
將加載以下版本:RCV1-v2,向量,完整集,主題多標簽:
>>> from sklearn.datasets import fetch_rcv1
>>> rcv1 = fetch_rcv1()
它返回具有以下屬性的類字典對象:
data
:特征矩陣是Scipy CSR稀疏矩陣,具有804414個樣本和47236個特征。非零值包含余弦標準化的對數TF-IDF向量。在[1]中提出了一個按時間順序的劃分:前面23149個樣本是訓練集。最后的781265個樣本是測試集。這是按照LYRL2004官方時間順序進行的。該數組具有0.16%的非零值:
>>> rcv1.data.shape
(804414, 47236)
target
:目標值存儲在Scipy CSR稀疏矩陣中,具有804414個樣本和103個類別。每個樣本在其類別中的值為1,在其他類別中的值為0。該數組具有3.15%的非零值:
>>> rcv1.target.shape
(804414, 103)
sample_id
:每個樣本都可以通過其ID進行識別,范圍從2286到810596(帶間隙):
>>> rcv1.sample_id[:3]
array([2286, 2287, 2288], dtype=uint32)
target_names
:每個樣本的主題目標值。每個樣本至少屬于一個主題,最多屬于17個主題。有103個主題,每個主題都由一個字符串表示。他們的語料庫頻率跨越五個數量級,從“ GMIL”的5個出現到“ CCAT”的381327:
>>> rcv1.target_names[:3].tolist()
['E11', 'ECAT', 'M11']
如有必要,將從rcv1主頁下載數據集。壓縮后的大小約為656 MB。
參考文獻
1(1,2)Lewis, D. D., Yang, Y., Rose, T. G., & Li, F. (2004). RCV1: A new benchmark collection for text categorization research. The Journal of Machine Learning Research, 5, 361-397.
7.3.6 Kddcup 99(網絡入侵檢測)數據集
KDD Cup '99數據集是通過處理MIT Lincoln Lab [1]創建的1998 DARPA入侵檢測系統(IDS)評估數據集的tcpdump部分而創建的。人工數據(在數據集首頁上進行了描述)是使用封閉網絡和人工注入的攻擊生成的,以在后臺正常活動的情況下產生大量不同類型的攻擊。由于最初的目標是為監督學習算法生成大型訓練集,所以有很大一部分(80.1%)的異常數據在現實世界中是不現實的,因此不適合用于旨在檢測“異常”數據的無監督異常檢測,即:
與正常數據在質量上有所不同 在觀察中占少數。
因此,我們將KDD數據集轉換為兩個不同的數據集:SA和SF。
SA是通過簡單選擇所有正常數據和少量異常數據得出的,異常比例為1%。
SF就像在[2]中一樣,簡單地獲取屬性logged_in為正的數據,從而集中在入侵攻擊上,其攻擊率為0.3%。
http和smtp是SF的兩個子集,對應于第三個特征等于'http'( 或者 ‘smtp’ )
一般KDD結構:
樣本總數 | 4898431 |
---|---|
維數 | 41 |
特征 | 離散(整數)或連續(浮點) |
目標標簽 | str,“正常”。或異常類型的名稱 |
SA結構:
樣本總數 | 976158 |
---|---|
維數 | 41 |
特征 | 離散(整數)或連續(浮點) |
目標標簽 | str,“正常”。或異常類型的名稱 |
SF結構:
樣本總數 | 699691 |
---|---|
維數 | 4 |
特征 | 離散(整數)或連續(浮點) |
目標標簽 | str,“正常”。或異常類型的名稱 |
http結構:
樣本總數 | 619052 |
---|---|
維數 | 3 |
特征 | 離散(整數)或連續(浮點) |
目標標簽 | str,“正常”。或異常類型的名稱 |
smtp結構:
樣本總數 | 95373 |
---|---|
維數 | 3 |
特征 | 離散(整數)或連續(浮點) |
目標標簽 | str,“正常”。或異常類型的名稱 |
sklearn.datasets.fetch_kddcup99
將加載kddcup99數據集;它返回一個類似于字典的對象,其中data
對應特征矩陣,目標值位于中target
。如有必要,將從網絡上下載數據集。
7.3.7 加州房屋數據集
數據集特征:
實例數 | 20640 |
---|---|
屬性數量 | 8個數字預測屬性和1個目標變量 |
屬性信息 | - MedInc 中位數收入 - HouseAge 房屋平均年齡 - AveRooms 平均房間數 - AveBedrms 平均臥室數 - Population 人口 - AveOccup 平均房屋出租率 - Latitude 房子街區緯度 - Longitude 房子街區經度 |
缺失值 | 無 |
該數據集是從StatLib存儲庫獲得的。 http://lib.stat.cmu.edu/datasets/
目標變量是加利福尼亞地區的房屋中位價。
該數據集來自1990年美國人口普查,每個人口普查區塊組使用一行。街區小組是美國人口普查局發布樣本數據的最小地理單位(街區小組通常人口為600至3,000人)。
可以使用該sklearn.datasets.fetch_california_housing
函數下載/加載 。
參考文獻
Pace, R. Kelley and Ronald Barry, Sparse Spatial Autoregressions, Statistics and Probability Letters, 33 (1997) 291-297
7.4 生成的數據集
此外,scikit-learn包括各種隨機樣本生成器,可用于構建大小和復雜度受控的人工數據集。
7.4.1 分類和聚類的生成器
這些生成器生成特征矩陣和相應的離散目標。
7.4.1.1 單標簽
make_blobs和make_classification通過。
make_blobs
和make_classification
都通過為每個類分配一個或多個正態分布的點集群來創建多類數據集集。 make_blobs
提供有關每個聚類的中心和標準偏差的更好控制,并用于演示聚類。 make_classification
專門通過相關,冗余和非信息性特征,類別的高斯聚類以及特征空間的線性變換等方式引入噪聲
make_gaussian_quantiles
將單個高斯聚類劃分為由同心超球體分隔的近似相等大小的類。 make_hastie_10_2
產生類似的10維二分類問題。
make_circles
與make_moons
生成對某些算法(例如基于質心的聚類或線性分類)具有挑戰性的二維二分類數據集(包括可選的高斯噪聲)。它們對于可視化很有用。make_circles
產生具有球形決策邊界的高斯數據以進行二元分類,同時 make_moons
產生兩個交織的半圓。
7.4.1.2 多標簽
make_multilabel_classification
生成帶有多個標簽的隨機樣本,以反映出從多個主題混合而來的一堆單詞。每個文檔的主題數是從泊松分布中得出的,主題本身是從固定的隨機分布中得出的。同樣,單詞的數量是從泊松分布中抽取的,單詞是從多項式分布抽取的,其中每個主題都定義了單詞的概率分布。 在以下方面簡化了 bag-of-words mixtures (單詞混合包) :
每個主題的單詞分布都是獨立繪制的,實際上,所有單詞分布都會受到稀疏的基本分布的影響,并且會相互關聯。 對于從多個主題生成的文檔,所有主題在生成其詞袋時均具有同等的權重。 沒有標簽的文檔單詞是隨機的,而不是來自基礎分布。

7.4.1.3 集群化
make_biclusters (shape, n_clusters, *[, …]) |
生成具有恒定塊對角線結構的數組以進行雙聚類。 |
---|---|
make_checkerboard (shape, n_clusters, *[, …]) |
生成具有棋盤格結構的數組以進行雙聚類。 |
7.4.2 回歸生成器
make_regression
產生的回歸目標是隨機特征的可選稀疏隨機線性組合,帶有噪聲。它的特征可能是不相關的,或者是低秩的(少數特征占大多數方差)。。
其他回歸生成器根據隨機特征確定性地生成函數。 make_sparse_uncorrelated
產生的目標是四個具有固定系數的特征的線性組合。其他特征顯示非線性關系, make_friedman1
是由多項式和正弦變換聯系起來的,make_friedman2
包括特征的乘法和往復; make_friedman3
類似于目標上的arctan變換。
7.4.3 用于流形學習的生成器
make_s_curve ([n_samples, noise, random_state]) |
生成S曲線數據集。 |
---|---|
make_swiss_roll ([n_samples, noise, random_state]) |
生成瑞士卷(swiss roll)數據集。 |
7.4.4 分解生成器
make_low_rank_matrix ([n_samples, …]) |
生成具有鐘形奇異值的低階矩陣 |
---|---|
make_sparse_coded_signal (n_samples, *, …) |
生成信號作為字典元素的稀疏組合。 |
make_spd_matrix (n_dim, *[, random_state]) |
生成隨機對稱的正定矩陣。 |
make_sparse_spd_matrix ([dim, alpha, …]) |
生成一個稀疏對稱定正矩陣。 |
7.5 加載其他數據集
7.5.1 樣本圖像
Scikit-learn還嵌入了一些示例 JPEG 圖像,由它們的作者在知識共享許可下發布。這些圖像可以用于測試算法和2維數據通道。
load_sample_images () |
加載樣本圖像以進行圖像處理。 |
---|---|
load_sample_image (image_name) |
加載單個樣本圖像的numpy數組 |
警告 |
---|
圖像的默認編碼基于uint8 類型來存儲。如果將輸入轉換為浮點表示,機器學習算法通常最有效。另外,如果你打算使用matplotlib.pyplpt.imshow ,不要忘記按以下示例中的步驟縮放到0-1的范圍。 |
例子: |
---|
使用K均值的顏色量化 |

7.5.2 svmlight / libsvm格式的數據集
scikit-learn包括用于以svmlight / libsvm格式加載數據集的實用函數。在這種格式中,每行代碼的形式是 <label> <feature-id>:<feature-value> <feature-id>:<feature-value> ...
,這種格式特別適合于稀疏數據集。在本模塊中,X
使用了scipy稀疏CSR矩陣,y
使用了numpy數組。
你可以按如下方式加載數據集:
>>> from sklearn.datasets import load_svmlight_file
>>> X_train, y_train = load_svmlight_file("/path/to/train_dataset.txt")
...
你也可以一次加載兩個(或更多)數據集:
>>> X_train, y_train, X_test, y_test = load_svmlight_files(
... ("/path/to/train_dataset.txt", "/path/to/test_dataset.txt"))
...
在這種情況下,X_train
并X_test
保證具有相同數量的特征。另一種達到同樣效果的方法是固定特征的數量:
>>> X_test, y_test = load_svmlight_file(
... "/path/to/test_dataset.txt", n_features=X_train.shape[1])
...
相關鏈接: |
---|
svmlight / libsvm格式的公共數據集:https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets 更快的API兼容實現:https://github.com/mblondel/svmlight-loader |
7.5.3 從openml.org存儲庫下載數據集
openml.org是機器學習數據和實驗的公共存儲庫,它允許每個人都可以上傳開放的數據集。
在sklearn.datasets
模塊下,可以使用 sklearn.datasets.fetch_openml
函數從存儲庫下載數據集。
例如,要下載小鼠大腦中基因表達的數據集:
>>> from sklearn.datasets import fetch_openml
>>> mice = fetch_openml(name='miceprotein', version=4)
要完全指定數據集,你需要提供名稱和版本,盡管版本是可選的,請參見下面的“ 數據集版本”。數據集總共包含1080個示例,這些示例屬于8個不同的類別:
>>> mice.data.shape
(1080, 77)
>>> mice.target.shape
(1080,)
>>> np.unique(mice.target)
array(['c-CS-m', 'c-CS-s', 'c-SC-m', 'c-SC-s', 't-CS-m', 't-CS-s', 't-SC-m', 't-SC-s'], dtype=object)
您可以通過查看DESCR
和details
屬性獲取有關數據集的更多信息:
>>> print(mice.DESCR)
**Author**: Clara Higuera, Katheleen J. Gardiner, Krzysztof J. Cios
**Source**: [UCI](https://archive.ics.uci.edu/ml/datasets/Mice+Protein+Expression) - 2015
**Please cite**: Higuera C, Gardiner KJ, Cios KJ (2015) Self-Organizing
Feature Maps Identify Proteins Critical to Learning in a Mouse Model of Down
Syndrome. PLoS ONE 10(6): e0129126...
>>> mice.details
{'id': '40966', 'name': 'MiceProtein', 'version': '4', 'format': 'ARFF',
'upload_date': '2017-11-08T16:00:15', 'licence': 'Public',
'url': 'https://www.openml.org/data/v1/download/17928620/MiceProtein.arff',
'file_id': '17928620', 'default_target_attribute': 'class',
'row_id_attribute': 'MouseID',
'ignore_attribute': ['Genotype', 'Treatment', 'Behavior'],
'tag': ['OpenML-CC18', 'study_135', 'study_98', 'study_99'],
'visibility': 'public', 'status': 'active',
'md5_checksum': '3c479a6885bfa0438971388283a1ce32'}
在DESCR
包含數據的任意文本說明,同時details
包含openml字典存儲的元數據,如數據集id。有關更多詳細信息,請參見OpenML文檔。小鼠蛋白質數據集的data_id
是40609,你可以使用此id(或名稱)在openml網站上獲取有關該數據集的更多信息:
>>> mice.url
'https://www.openml.org/d/40966'
該data_id
還唯一識別OpenML數據集:
>>> mice.details
{'id': '4550', 'name': 'MiceProtein', 'version': '1', 'format': 'ARFF',
'creator': ...,
'upload_date': '2016-02-17T14:32:49', 'licence': 'Public', 'url':
'https://www.openml.org/data/v1/download/1804243/MiceProtein.ARFF', 'file_id':
'1804243', 'default_target_attribute': 'class', 'citation': 'Higuera C,
Gardiner KJ, Cios KJ (2015) Self-Organizing Feature Maps Identify Proteins
Critical to Learning in a Mouse Model of Down Syndrome. PLoS ONE 10(6):
e0129126. [Web Link] journal.pone.0129126', 'tag': ['OpenML100', 'study_14',
'study_34'], 'visibility': 'public', 'status': 'active', 'md5_checksum':
'3c479a6885bfa0438971388283a1ce32'}
7.5.3.1 數據集版本
數據集由唯一指定data_id
,但不一定由其名稱指定。具有相同名稱的數據集可以存在多個不同的“版本”,這些“版本”可以包含完全不同的數據集。如果發現某個數據集的特定版本包含重大問題,則可以將其停用。使用名稱指定數據集將返回仍處于可用狀態的數據集的最早版本。這意味著fetch_openml(name="miceprotein")
如果較早的版本不可用,則可能在不同的時間返回不同的結果。你可以看到我們上面獲取的data_id
為40966的數據集是“ miceprotein ”數據集的版本1:
>>> mice.details['version']
'1'
實際上,該數據集只有一個版本。另一方面,鳶尾花數據集具有多個版本:
>>> iris = fetch_openml(name="iris")
>>> iris.details['version']
'1'
>>> iris.details['id']
'61'
>>> iris_61 = fetch_openml(data_id=61)
>>> iris_61.details['version']
'1'
>>> iris_61.details['id']
'61'
>>> iris_969 = fetch_openml(data_id=969)
>>> iris_969.details['version']
'3'
>>> iris_969.details['id']
'969'
用名稱“ iris”指定數據集會產生最早的版本,即版本1,它的data_id
是61。為了確保始終獲得此確切的數據集,最可靠的方法是通過data_id
來指定它。另一個``data_id`為969的數據集是版本3(版本2已停用),并且包含數據的二進制版本:
>>> np.unique(iris_969.target)
array(['N', 'P'], dtype=object)
你還可以指定名稱和版本,這也可以唯一標識數據集:
>>> iris_version_3 = fetch_openml(name="iris", version=3)
>>> iris_version_3.details['version']
'3'
>>> iris_version_3.details['id']
'969'
參考文獻:
Vanschoren, van Rijn, Bischl and Torgo “OpenML: networked science in machine learning”, ACM SIGKDD Explorations Newsletter, 15(2), 49-60, 2014.
7.5.4 從外部數據集加載
scipy -learn適用于存儲為numpy數組或scipy稀疏矩陣的任何數字數據。其他可轉換為數字數組的類型(如panda DataFrame)也可以接受。
以下是將標準列數據加載為scikit-learn可用格式的一些推薦方法:
pandas.io 提供了從常見格式(包括CSV,Excel,JSON和SQL)讀取數據的工具。也可以從元組或字典列表構造DataFrame。Pandas可以平穩地處理異構數據,并提供了用于將其操縱和轉換為適合scikit-learn的數字數組的工具。 scipy.io 專門研究在科學計算環境中經常使用的二進制格式,如.mat和.arff numpy / routines.io 用于將列式數據標準加載到numpy數組中 scikit-learn datasets.load_svmlight_file
用于svmlight或libSVM稀疏格式scikit-learn datasets.load_files
用于文本文件的目錄,其中每個目錄的名稱是每個類別的名稱,每個目錄內的每個文件對應于該類別中的一個樣本
對于一些其他數據,例如圖像,視頻和音頻,你可以參考:
skimage.io或 Imageio, 用于將圖像和視頻加載到numpy數組中 scipy.io.wavfile.read 用于將WAV文件讀取到numpy數組中
存儲為字符串(在panda數據流中很常見)的分類(或命名)特征需要使用sklearn.preprocessing.OneHotEncoder
或sklearn.preprocessing.OrdinalEncoder
轉換為數字特征。請參閱預處理數據。
注意:如果您管理自己的數字數據,建議使用優化的文件格式,例如HDF5,以減少數據加載時間。諸如H5Py,PyTables和pandas之類的各種庫都提供了Python接口,用于以該格式的數據的讀取和寫入。