日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sklearn学习(一)

發布時間:2025/4/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sklearn学习(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習網站

http://scikit-learn.org/stable/tutorial/basic/tutorial.html#machine-learning-the-problem-setting

內容

一般來說,學習問題可以被分為幾大類:

  • 監督學習(supervised learing)。數據包括一些我們可以預測的屬性。
  • 非監督學習(unsupervised learning)。數據有一堆輸入向量,但是沒有給輸出的目標值。

監督學習分為:

  • 分類(classification):當樣本屬于兩個或者更多的數據的時候,我們可以通過學習一些貼好標簽的數據,然后去預測一些沒有給出標簽的數據。(離散問題(discrete))
  • 回歸(regression):當希望預測的結果是一個或者多個連續的變量的時候,這就是回歸。

非監督學習分為:

  • 聚類(clustering):目標去發現一些有相似特征的類。
  • 密度估計(Density estimation):描述一些輸入數據的特征信息
  • 數據降維:將高維數據降維到低維數據

一般將數據集分為訓練集測試集

sklearn內有一些標準數據,例如:iris(鳶尾花),手寫數字數據為了分類,然后,還有波斯頓房價數據為了回歸。

以導入iris數據為例

導入數據:

from sklearn import datasets iris = datasets.load_iris()

數據集是有點像字典的類。包括一些數據,還有元數據。這些數據被存在.data中。內容是一個n個例子,還有n個特征的array。在監督學習的問題中,一個或者是更多的響應數據被存.target中。

關于數據的操作具體的可以在下面的網址中找到。

http://scikit-learn.org/stable/datasets/index.html#datasets

關于上面的.data和.target是什么意思:

例如:

print(iris.data)

輸出:(數據較多,就截取一部分)

[[5.1 3.5 1.4 0.2][4.9 3. 1.4 0.2][4.7 3.2 1.3 0.2][4.6 3.1 1.5 0.2]...[6.3 2.5 5. 1.9][6.5 3. 5.2 2. ][6.2 3.4 5.4 2.3][5.9 3. 5.1 1.8]] print(iris.target)

輸出:

[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 00 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 11 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 22 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 22 2]

學習和預測

在數字數據集中,任務是預測一個圖片,然后給出預測的數字。數字集合包括有0到9。

在sklearn中,對于分類器的估計是一個python類。實現了兩個方法fit(X,y)和predict(T)

一個估計類的例子的sklearn.svm.SVC是實現了支持向量機的分類器。分類器的構造函數會需要一些參數(我們稱之為超參數)。從現在起,我們認為這個評估器,就是一個黑盒子。

from sklearn import svm clf = svm.SVC(gamma=0.001, C=100.)

這里,我們給的時候是給了固定的參數,但是還有兩種設置參數的方式。
grid-search http://scikit-learn.org/stable/modules/grid_search.html#grid-search
cross-validation http://scikit-learn.org/stable/modules/cross_validation.html#cross-validation

我們稱評估器為clf,因為它是一個分類器。它必須要從模型中學習。這項被完成是通過fit方法。

數字預測代碼

from sklearn import svm from sklearn import datasetsdigits = datasets.load_digits() clf = svm.SVC(gamma=0.001, C=100.) clf.fit(digits.data[:-1], digits.target[:-1]) print("pridict:", clf.predict(digits.data[-1:])) print("actually:", digits.target[-1:])

輸出:

pridict: [8] actually: [8]

注意:
選最后一個數據的時候要 digits.data[-1:] 這樣方式。主要是為了使得在外面包一層,因為測試數據可能不止一個。所以,當必須要以集合的形式傳進去。否者就會報下面的錯誤。

ValueError: Expected 2D array, got 1D array instead: array=[ 0. 0. 10. 14. 8. 1. 0. 0. 0. 2. 16. 14. 6. 1. 0. 0. 0. 0.15. 15. 8. 15. 0. 0. 0. 0. 5. 16. 16. 10. 0. 0. 0. 0. 12. 15.15. 12. 0. 0. 0. 4. 16. 6. 4. 16. 6. 0. 0. 8. 16. 10. 8. 16.8. 0. 0. 1. 8. 12. 14. 12. 1. 0.]. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

可以來看下到底最后一個數據是怎么樣的:

其實確實有點像是8。

plt語句的最后一個參數含義是為了將這個變成灰色。否則顏色有點奇怪。

代碼:

from sklearn import svm from sklearn import datasets import matplotlib.pyplot as pltdigits = datasets.load_digits() clf = svm.SVC(gamma=0.001, C=100.) clf.fit(digits.data[:-1], digits.target[:-1]) print("pridict:", clf.predict(digits.data[-1:])) print("actually:", digits.target[-1:])plt.imshow(digits.images[-1], cmap=plt.cm.gray_r) # 變灰色plt.show()

模型可持續性

相信很多哥們都遇到這樣的問題,訓練一個模型需要很久的時間,但是如果,一開始就已經有了這樣的模型之后,以后就直接調用,豈不是美滋滋?所以,python原生的這樣的操作。

pickle庫

from sklearn import svm from sklearn import datasets import pickledigits = datasets.load_digits() clf = svm.SVC(gamma=0.001, C=100.) clf.fit(digits.data[:-1], digits.target[:-1]) print("pridict:", clf.predict(digits.data[-1:])) print("actually:", digits.target[-1:])s = pickle.dumps(clf)clf2 = pickle.loads(s)print(clf2.predict(digits.data[-1:]))

輸出為;

pridict: [8] actually: [8] [8]

當然是可以保存為文件類型:

with open('clf', 'wb') as f:pickle.dump(clf, f)with open('clf', 'rb') as f:clf2 = pickle.load(f)print(clf2.predict(digits.data[-1:]))

用上面的代碼來替換掉之前的 dumps還有loads也是可以。

當然,這樣就在代碼上多出一個這樣的文件。不過可以被移植了,算是一個優點。

其實文件取什么名字都沒有什么多大意義的。當然啦,選什么類型這種東西,對于程序員來說也是這樣的,因為本質上都是二進制文件。

在sklearn中,除了python原生的pickle可以使用,還可以使用sklearn自帶的joblib

joblib.dump(clf, 'clf2') clf2 = joblib.load('clf2') print(clf2.predict(digits.data[-1:]))

用這個代碼代替之前的那段代碼也是可以的。
而且, joblib對于處理大數據的時候會比pickle更有效(不過我還沒有試過)。不過至少,我覺得寫起來效率會比pickle更高。但是,就是沒有在代碼間的那種先放著,然后之后再做處理的操作。(雖然我目前還沒意識到,為什么需要有這種操作。。。)

但是學好pickle也是很重要的,因為基本所有的數據都是可以用這個來做。在python上的課擴展性會更強點。

sklearn使用公約

類型轉變:

除非特殊情況,否則,輸入轉變到float64

重新fit和更新超參數(Hyper-parameters)

  • 超參數可以被更新,通過sklearn.pipeline.Pipeline.set_params方法。
  • 只需要再調用一次fit之后,就會覆蓋掉之前學習的效果。

比如下面的代碼:

import numpy as np from sklearn.svm import SVCrng = np.random.RandomState(0) X = rng.rand(100, 10) y = rng.binomial(1, 0.5, 100) X_test = rng.rand(5, 10) clf = SVC() clf.set_params(kernel='linear').fit(X, y) print(clf.predict(X_test)) clf.set_params(kernel='rbf').fit(X, y) print(clf.predict(X_test))

輸出是:

[1 0 1 1 0] [0 0 0 1 0]

注意到,分類器這里重新設置了SVC的核函數。當然,設置了不同的核函數之后,最后的預測效果也不一樣了。

不過考慮到,這是因為數據本身就是隨機出來的效果。所以,在這里本身蘊含的信息就是一個混亂的。所以,根據不同的核函數的時候,就導致了很大的誤差。實際應用中的效果應該是,就算是有效果,但是效果也不應該是這么明顯的。

Multiclass vs. multilabel fitting

采用multiclass 中的分類器,學習和預測任務,是依賴于fit的時候的目標類型。

例如下面的這個代碼:

from sklearn.svm import SVC from sklearn.multiclass import OneVsRestClassifier from sklearn.preprocessing import LabelBinarizerX = [[1, 2], [2, 4], [4, 5], [3, 2], [3, 1]] y = [0, 0, 1, 1, 2]classif = OneVsRestClassifier(estimator=SVC(random_state=0)) print(classif.fit(X, y).predict(X))# 數據二進制化 y = LabelBinarizer().fit_transform(y) print(classif.fit(X, y).predict(X))

輸出:

[0 0 1 1 2] [[1 0 0][1 0 0][0 1 0][0 0 0][0 0 0]]

但是y的被轉變之后的數據是

[[1 0 0][1 0 0][0 1 0][0 1 0][0 0 1]]

注意到后面兩行的數據是不一樣的,都是全0,表示的是,沒有一個匹配到。

但是,如果是多個標簽的情況下:

比如說,下面的這個y就是一個多標簽的問題。

后面的輸出矩陣,其實就轉換成了一個bool值問題。即表示某個元素存在與否。

from sklearn.svm import SVC from sklearn.multiclass import OneVsRestClassifier from sklearn.preprocessing import MultiLabelBinarizer X = [[1, 2], [2, 4], [4, 5], [3, 2], [3, 1]] y = [[0, 1], [0, 2], [1, 3], [0, 2, 3], [2, 4]]classif = OneVsRestClassifier(estimator=SVC(random_state=0)) # 數據二進制化 y = MultiLabelBinarizer().fit_transform(y) print(classif.fit(X, y).predict(X))

輸出為:

[[1 1 0 0 0][1 0 1 0 0][0 1 0 1 0][1 0 1 0 0][1 0 1 0 0]]

然后,我們看原來的y值為

[[1 1 0 0 0][1 0 1 0 0][0 1 0 1 0][1 0 1 1 0][0 0 1 0 1]]

總結

以上是生活随笔為你收集整理的sklearn学习(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩网站视频 | 色人阁网站 | 亚洲福利视频导航 | 日本熟女一区二区 | a无一区二区三区 | 国产影视一区二区 | 97看片网| 久久av影院 | 欧美网站在线 | 让男按摩师摸好爽 | 欧美视频在线一区二区三区 | 免费看a级片 | 亚洲黄色精品视频 | 精品乱码久久久久久中文字幕 | 国产精品成人自拍 | 国产网站免费看 | 国产精品久久久久三级无码 | 国产又好看的毛片 | 国产春色| 青青青青草 | 中文字幕人成乱码熟女香港 | 国产欧美一区二区三区在线 | 免费看国产片在线观看 | 日本少妇毛茸茸高潮 | 日本中文在线播放 | 成人免费高清在线观看 | 国产成a人亚洲精v品在线观看 | 日韩经典三级 | 国产精品原创 | 黄色一级一片 | 北岛玲av| 亚洲大胆视频 | 黄色av网站在线免费观看 | 在线免费日本 | 色天天综合 | 欧美一级鲁丝片 | 久色视频 | 在线观看中文字幕一区二区 | 国产精品免费av | 国产成人综合一区二区三区 | 蜜臀在线视频 | 亚洲黄色第一页 | 人人综合网 | 亚洲不卡视频在线 | 成人18网站 | 特级av| 久久国产一区 | 四虎激情| 亚洲精品91 | 亚洲中文字幕一区在线 | 精品婷婷色一区二区三区蜜桃 | 天天干天天干天天干天天 | 欧美成人小视频 | 久久免费国产视频 | 婷婷影视 | 日韩高清不卡在线 | 久久久久无码国产精品不卡 | 欧美激情午夜 | 色无极亚洲 | 亚洲精品乱码久久久久99 | 成人久久电影 | 最新日韩在线 | 美女黄页在线观看 | 亚洲黄色在线观看视频 | 亚洲爱av| 日韩av在线免费观看 | 在线播放波多野结衣 | 91午夜剧场 | 永久免费未网 | 激情影院内射美女 | 天码人妻一区二区三区在线看 | 国产欧美三区 | 欧美日韩一区二区三区不卡视频 | 成年免费在线观看 | 色七七视频 | 男女无套免费视频网站动漫 | 性色av一区二区三区免费 | 999精品在线视频 | 91超级碰| 毛片一区 | 亚洲婷婷在线视频 | 亚洲一区国产精品 | 亚洲av无码不卡 | 97精品视频在线观看 | 91丝袜在线 | 日韩最新| 翔田千里在线播放 | 最近中文字幕无免费 | 欧美激情视频一区二区三区在线播放 | 久久人| 天天干天天色综合 | 免费性情网站 | 一级在线看 | 一本一道波多野结衣一区二区 | 亚洲日本精品视频 | 久久久久免费看 | 欧美老女人性生活视频 | 一二三区在线观看 | 亚洲欧美日韩高清 |