[Python & Machine Learning] 學習筆記之scikit-learn機器學習庫
1. scikit-learn介紹
scikit-learn是Python的一個開源機器學習模組,它建立在NumPy,SciPy和matplotlib模組之上。值得一提的是,scikit-learn最先是由David Cournapeau在2007年發起的一個Google Summer of Code專案,從那時起這個專案就已經擁有很多的貢獻者了,而且該專案目前為止也是由一個志願者團隊在維護著。
scikit-learn最大的特點就是,為使用者提供各種機器學習演算法介面,可以讓使用者簡單、高效地進行資料探勘和資料分析。
2. scikit-learn安裝
scikit-learn的安裝方法有很多種,而且也是適用於各種主流作業系統,scikit-learn主頁上也分別詳細地介紹了在不同作業系統下的三種安裝方法,具體安裝詳情請移步至
在這裡,首先向大家推薦一款學習Python的強大的開發環境python(x,y)。python(x,y)是一個基於python的科學計算軟體包,它包含整合開發環境Eclipse和Python開發外掛pydev、資料互動式編輯和視覺化工具spyder,而且還內嵌了Python的基礎資料庫numpy和高階數學庫scipy、3D視覺化工具集MayaVi、Python介面開發庫PyQt、Python與C/C++混合編譯器SWIG。除此之外,python(x,y)配備了豐富齊全的幫助文件,非常方便科研人員使用。
對於像樓主這樣,在學校習慣了用Matlab模擬搞科研的學生而言,python(x,y)是學習Python的一個絕佳選擇,其中內嵌的spyder提供了類似於Matlab的互動介面,可以很方便地使用。python(x,y)的下載請點選這裡:
由於scikit-learn是基於NumPy、SciPy和matplotlib模組的,所以在安裝scikit-learn之前必須要安裝這3個模組,這就很麻煩。但是,如果你提前像樓主這樣安裝了python(x,y),它本身已經包含上述的模組,你只需下載與你匹配的scikit-learn版本,直接點選安裝即可。
3. scikit-learn載入資料集
scikit-learn內包含了常用的機器學習資料集,比如做分類的iris和digit資料集,用於迴歸的經典資料集Boston house prices。
scikit-learn載入資料集例項:
from sklearn import datasets iris = datasets.load_iris()
scikit-learn載入的資料集是以類似於字典的形式存放的,該物件中包含了所有有關該資料的資料資訊(甚至還有參考文獻)。其中的資料值統一存放在.data的成員中,比如我們要將iris資料顯示出來,只需顯示iris的data成員:
print iris.data
資料都是以n維(n個特徵)矩陣形式存放和展現,iris資料中每個例項有4維特徵,分別為:sepal length、sepal width、petal length和petal width。顯示iris資料:
[[ 5.1 3.5 1.4 0.2] [ 4.9 3. 1.4 0.2] ... ... [ 5.9 3. 5.1 1.8]]
如果是對於監督學習,比如分類問題,資料中會包含對應的分類結果,其存在.target成員中:
print iris.target
對於iris資料而言,就是各個例項的分類結果:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
4. scikit-learn學習和預測
scikit-learn提供了各種機器學習演算法的介面,允許使用者可以很方便地使用。每個演算法的呼叫就像一個黑箱,對於使用者來說,我們只需要根據自己的需求,設定相應的引數。
比如,呼叫最常用的支撐向量分類機(SVC):
from sklearn import svm clf = svm.SVC(gamma=0.001, C=100.) #不希望使用預設引數,使用使用者自己給定的引數
print clf
分類器的具體資訊和引數:
SVC(C=100.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.001, kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False)
分類器的學習和預測可以分別利用 fit(X,Y) 和 predict(T) 來實現。
例如,將digit資料劃分為訓練集和測試集,前n-1個例項為訓練集,最後一個為測試集(這裡只是舉例說明fit和predict函式的使用)。然後利用fit和predict分別完成學習和預測,程式碼如下:
from sklearn import datasets from sklearn import svm clf = svm.SVC(gamma=0.001, C=100.) digits = datasets.load_digits() clf.fit(digits.data[:-1], digits.target[:-1]) result=clf.predict(digits.data[-1]) print result
預測結果為:[8]
我們可以通過程式來檢視測試集中的手寫體例項到底長什麼樣來簡單驗證一下分類效果,程式碼和結果如下所示:
import matplotlib.pyplot as plot plot.figure(1, figsize=(3, 3)) plot.imshow(digits.images[-1], cmap=plot.cm.gray_r, interpolation='nearest') plot.show()
最後一個手寫體例項為:
我們可以看到,這就是一個手寫的數字“8”的,實際上正確的分類也是“8”。我們通過這個簡單的例子,就是為了簡單的學習如何來使用scikit-learn來解決分類問題,實際上這個問題要複雜得多。(PS:學習就是循序漸進,弄懂一個例子,就會弄懂第二個,... ,然後就是第n個,最後就會形成自己的知識和理論,你就可以輕鬆掌握,來解決各種遇到的複雜問題。)
再為各位展示一個scikit-learn解決digit分類(手寫體識別)的程式(by Gael Varoquaux),相信看過這個程式大家一定會對scikit-learn機器學習庫有了一定的瞭解和認識。
import matplotlib.pyplot as plt # Import datasets, classifiers and performance metrics from sklearn import datasets, svm, metrics # The digits dataset digits = datasets.load_digits() # The data that we are interested in is made of 8x8 images of digits, let's # have a look at the first 3 images, stored in the `images` attribute of the # dataset. If we were working from image files, we could load them using # pylab.imread. Note that each image must have the same size. For these # images, we know which digit they represent: it is given in the 'target' of # the dataset. images_and_labels = list(zip(digits.images, digits.target)) for index, (image, label) in enumerate(images_and_labels[:4]): plt.subplot(2, 4, index + 1) plt.axis('off') plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest') plt.title('Training: %i' % label) # To apply a classifier on this data, we need to flatten the image, to # turn the data in a (samples, feature) matrix: n_samples = len(digits.images) data = digits.images.reshape((n_samples, -1)) # Create a classifier: a support vector classifier classifier = svm.SVC(gamma=0.001) # We learn the digits on the first half of the digits classifier.fit(data[:n_samples / 2], digits.target[:n_samples / 2]) # Now predict the value of the digit on the second half: expected = digits.target[n_samples / 2:] predicted = classifier.predict(data[n_samples / 2:]) print("Classification report for classifier %s:\n%s\n" % (classifier, metrics.classification_report(expected, predicted))) print("Confusion matrix:\n%s" % metrics.confusion_matrix(expected, predicted)) images_and_predictions = list(zip(digits.images[n_samples / 2:], predicted)) for index, (image, prediction) in enumerate(images_and_predictions[:4]): plt.subplot(2, 4, index + 5) plt.axis('off') plt.imshow(image, cmap=plt.cm.gray_r, interpolation='nearest') plt.title('Prediction: %i' % prediction) plt.show()
輸出結果:
Classification report for classifier SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.001, kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False): precision recall f1-score support 0 1.00 0.99 0.99 88 1 0.99 0.97 0.98 91 2 0.99 0.99 0.99 86 3 0.98 0.87 0.92 91 4 0.99 0.96 0.97 92 5 0.95 0.97 0.96 91 6 0.99 0.99 0.99 91 7 0.96 0.99 0.97 89 8 0.94 1.00 0.97 88 9 0.93 0.98 0.95 92 avg / total 0.97 0.97 0.97 899 Confusion matrix: [[87 0 0 0 1 0 0 0 0 0] [ 0 88 1 0 0 0 0 0 1 1] [ 0 0 85 1 0 0 0 0 0 0] [ 0 0 0 79 0 3 0 4 5 0] [ 0 0 0 0 88 0 0 0 0 4] [ 0 0 0 0 0 88 1 0 0 2] [ 0 1 0 0 0 0 90 0 0 0] [ 0 0 0 0 0 1 0 88 0 0] [ 0 0 0 0 0 0 0 0 88 0] [ 0 0 0 1 0 1 0 0 0 90]]
5. 總結
1)scikit-learn的介紹和安裝;
2)對scikit-learn有個概括的瞭解,能夠嘗試利用scikit-learn來進行資料探勘和分析。
6. 參考內容
[2] 機器學習實戰
相關推薦
[Python & Machine Learning] 學習筆記之scikit-learn機器學習庫
1. scikit-learn介紹 scikit-learn是Python的一個開源機器學習模組,它建立在NumPy,SciPy和matplotlib模組之上。值得一提的是,scikit-learn最先是由David Cournapeau在2007年發起的一個Google Summer of Code專
TensorFlow官方教程學習筆記之2-用於機器學習初學者學習的MNIST資料集(MNIST For ML Beginners)
1.資料集 MNIST是機器視覺入門級的資料集 2.演算法 1)核心 迴歸(Regression)演算法: 2)代價函式 交叉熵(cross-entropy): 3)優化 梯度下降法 3.程式碼 # Copyright 2
Python scikit-learn機器學習工具包學習筆記:cross_validation模組
sklearn.cross_validation模組的作用顧名思義就是做cross validation的。 cross validation大概的意思是:對於原始資料我們要將其一部分分為train data,一部分分為test data。train data用於訓練,
Scikit-learn機器學習實戰之Kmeans
摘要 上篇部落格談到了如何安裝Python中強大的機器學習庫scikit-learn:Windos環境安裝scikit-learn函式庫流程,本篇主要是對其Kmeans示例進行學習。 Kmeans演算法的缺陷 聚類中心的個數K 需要事先給定,但在實際中這個 K 值的選
Python scikit-learn機器學習:feature_selection模組
sklearn.feature_selection模組的作用是feature selection,關鍵在於選擇合適的變數達到降維的目的,而feature extraction模組則是從資料集中利用某類演算法抽取具有代表性的特徵,例如tf-idf使用。 Univ
Scikit-Learn機器學習之監督學習模型案例集-新聞/郵件文字內容分類(樸素貝葉斯演算法模型)
最簡單的辦法 下載'20news-bydate.pkz', 放到C:\\Users\[Current user]\scikit_learn_data 下邊就行. 2.1. 手動下載 檔案 存放到scikit_learn_data/20new
[機器學習]Scikit-Learn學習筆記03——Scikit-Learn資料模型
Scikit-Learn提供了比較全的資料集,主要分為以下幾類 1. 自帶的小資料集(packaged dataset) 2. 線上下載的資料集(Downloaded Dataset) 3. 生成的資料集(Generated Dataset) 4. svm
Python/scikit-learn機器學習庫(特徵選取)
去除方差小的特徵 設定一個方差閾值,沒有達到這個方差閾值的特徵都會被丟棄。 VarianceThreshold,演算法輸入只要求特徵(X),不需要輸入結果(Y)。 from sklearn.feature_selection import Varia
Machine Learning(Stanford)| 斯坦福大學機器學習筆記--第一週(1.監督學習與無監督學習的介紹)
以上例子中,總共有兩個特徵,即病人年齡和腫瘤大小。在別的ML問題中,經常會用到更多特徵,別人在研究這個問題時, 通常使用如下這些特徵:比如腫瘤的厚度,腫瘤細胞大小和形狀的一致性等等。 真正對於一些學習問題,用到的不只是三五個特徵,經常要用到無數多個特徵,非常多的屬性。所以,你的學習演算法要利用很多的屬性或特徵
python machine learning 讀書筆記1——Mac OS環境搭建技巧
安裝homebrew: $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 安裝python3, pip3: $ brew
Machine Learning(Stanford)| 斯坦福大學機器學習筆記--第二週(1.多元線性迴歸及多元線性迴歸的梯度下降)
一.Multivariate Linear regression(多元線性迴歸) 現在起將開始介紹一種新的更為有效的線性迴歸形式。這種形式適用於多個變數或者多特徵量的情況。 在之前學習過的線性迴歸中
Python/scikit-learn機器學習庫(SVM支援向量機)
SVM SVM用於分類、迴歸、異常檢測。 優點: 高維空間有效。 維度小於樣本數時依然有效。 樣本少時表現不好。 分類 多分類: SVC、NuSVC、LinearSVC。SVMs決策函式依賴於訓練資料中一部分,這些向量稱為支援向量。 NuSVC
scikit-learn機器學習(五)--條件概率,全概率和貝葉斯定理及python實現
在理解貝葉斯之前需要先了解一下條件概率和全概率,這樣才能更好地理解貝葉斯定理 一丶條件概率 條件概率定義:已知事件A發生的條件下,另一個事件B發生的概率成為條件概率,即為P(B|A) 如圖A∩B那一部分的發生的概率即為P(AB), P(AB)=發
Scikit-Learn機器學習實踐——垃圾短信識別
機器學習文章首發個人博客:http://zmister.com/archives/173.html前不久,我們使用NLTK的貝葉斯分類模型垃圾對短信數據進行機器學習的垃圾短信識別。其實除了使用NLTK,我們還可以使用Scikit-Learn這個集成了諸多機器學習算法的模塊進行上述的實驗。Scikit-Lear
斯坦福大學公開課機器學習: advice for applying machine learning | regularization and bais/variance(機器學習中方差和偏差如何相互影響、以及和算法的正則化之間的相互關系)
交叉 來講 相對 同時 test 如果 開始 遞增 相互 算法正則化可以有效地防止過擬合, 但正則化跟算法的偏差和方差又有什麽關系呢?下面主要討論一下方差和偏差兩者之間是如何相互影響的、以及和算法的正則化之間的相互關系 假如我們要對高階的多項式進行擬合,為了防止過擬合現象
機器學習筆記之十一——整合學習之Boosting及AdaBoosting
上一篇記述了Bagging的思維與應用 : https://blog.csdn.net/qq_35946969/article/details/85045432 本篇記錄Boosting的思想與應用:AdaBoosting、GDBT(
scikit-learn機器學習(二)--嶺迴歸,Lasso迴歸和ElasticNet迴歸
多元線性迴歸模型中,為了是均方差誤差最小化,常見的做法是引入正則化,正則化就是給對模型的引數或者說是係數新增一些先驗假設,控制模型的空間,使模型的複雜度較小。 正則化目的:防止過擬合 正則化本質:約束要優化的引數 正則化會保留樣本的所有特徵向量,但是會
Machine Learning第十講【大規模機器學習】
本部分主要包括如下內容: Learning With Large Datasets (大資料集訓練模型) Stochastic Gradient Descent (隨機梯度下降演算法) &n
《OpenCV3程式設計入門》學習筆記之官方例程學習
OpenCV官方資料做的相當完善,其中官方例程就是非常好的參考資料。 1. 其在...\opencv\sources\samples\cpp\tutorial_code 路徑下,如圖: 這裡以v
scikit-learn機器學習常用算法原理及編程實戰(一)
sed 數據 super 結構化 得到 人工智 計算機程序 語音 數值 機器學習介紹 機器學習的概念 機器學習要解決的問題分類 使用機器學習解決問題的一般性步驟 什麽是機器學習 機器學習是一個計算機程序,針對某個特定的任務 ,從經驗中學習,並且越做越好。 誰掌握的數據