前言
于sklearn的使用來(lái)說(shuō)矾柜,目前只是想成為一名調(diào)包俠阱驾,但是調(diào)包俠起碼也得知道有哪些包可以調(diào),為此找了一些教程想快速入門怪蔑,通過(guò)一番查找里覆,終于找到了一名大佬叫做莫煩寫的教程,教程短小實(shí)用缆瓣,對(duì)我想快速了解sklearn來(lái)說(shuō)是再適合不過(guò)了喧枷。
在教程里完成sklearn的一般使用的教程之后,為了鞏固弓坞,為此寫此筆記隧甚,加深理解和日后的復(fù)習(xí)。
通用模板
實(shí)例化
對(duì)于sklearn這個(gè)庫(kù)來(lái)說(shuō)渡冻,是用面向?qū)ο蟮乃枷雭?lái)使用的呻逆。
就是每種算法都是一個(gè)對(duì)象,要使用某種算法解決問(wèn)題菩帝,可以將其import進(jìn)來(lái),此時(shí)它只是個(gè)對(duì)象,只有在實(shí)例化之后才可以對(duì)數(shù)據(jù)學(xué)習(xí)和預(yù)測(cè)
from sklearn.neighbors import KNeighborsClassifier
obj = KNeighborsClassifier()
此時(shí)實(shí)例obj可以對(duì)數(shù)據(jù)訓(xùn)練學(xué)習(xí)之后再對(duì)數(shù)據(jù)進(jìn)行預(yù)測(cè)了呼奢,但是此時(shí)并沒(méi)有數(shù)據(jù)
不過(guò)sklearn中有數(shù)據(jù)供我們使用
獲取數(shù)據(jù)
from sklearn import datasets
iris = datasets.load_iris()
x = iris.data
y = iris.target
導(dǎo)入的數(shù)據(jù)是個(gè)訓(xùn)練集宜雀,并不能直接傳遞給實(shí)例對(duì)其學(xué)習(xí),因?yàn)閷?shí)例需要特征和標(biāo)簽才能開(kāi)始學(xué)習(xí)(這個(gè)實(shí)例是這個(gè)情況的握础,無(wú)監(jiān)督學(xué)習(xí)現(xiàn)在還不那么清楚是個(gè)什么樣的情況)
不過(guò)特征和標(biāo)簽都存儲(chǔ)在data和target標(biāo)簽中辐董,可以輕松的獲得
開(kāi)始訓(xùn)練和預(yù)測(cè)
這個(gè)時(shí)候,實(shí)例有了禀综,數(shù)據(jù)也有了简烘,可以開(kāi)始對(duì)數(shù)據(jù)訓(xùn)練和學(xué)習(xí)了
obj.fit(x, y)
y_pred = obj.predict(x[:4, :]
print(y - y_pred)
輸出結(jié)果:
[ 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0
-1 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1
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]
準(zhǔn)確度還是蠻高的,到此已經(jīng)完成了一個(gè)機(jī)器學(xué)習(xí)的基本過(guò)程
劃分訓(xùn)練集
一般把訓(xùn)練集劃分為訓(xùn)練集和測(cè)試集定枷,這樣來(lái)驗(yàn)證算法的準(zhǔn)確性比較好
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)
其中參數(shù)test_size=0.3代表將把訓(xùn)練集的30%數(shù)據(jù)當(dāng)做測(cè)試集使用
現(xiàn)在有了訓(xùn)練集和測(cè)試集孤澎,重復(fù)之前的步驟,對(duì)訓(xùn)練集訓(xùn)練:
knn = KNeighborsClassifier()
knn.fit(x_train, y_train)
y_pred = knn.predict(x_test)
print(y_pred - y_test)
輸出結(jié)果:
[ 0 0 0 0 0 -1 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
注意欠窒,每次運(yùn)行的輸出結(jié)果可能不一樣
參數(shù)獲取
對(duì)于每個(gè)學(xué)習(xí)到的模型覆旭,也就是一個(gè)假設(shè)函數(shù),都有一些參數(shù)
還有預(yù)測(cè)的時(shí)候也是有參數(shù)設(shè)置的
對(duì)于這兩個(gè)參數(shù)的獲取岖妄,可以通過(guò)實(shí)例化后的實(shí)例的coef_,intercept_屬性和get_params()獲得
由于分類好像沒(méi)有實(shí)例的那幾個(gè)屬性型将,換個(gè)線性回歸的的模型:
from sklearn import datasets
from sklearn.linear_model import LinearRegression
loaded_data = datasets.load_boston()
data_X = loaded_data.data
data_y = loaded_data.target
model = LinearRegression()
model.fit(data_X, data_y)
y_pred = model.predict(data_X[:4, :])
print(model.coef_)
print(model.intercept_)
輸出:
[-1.07170557e-01 4.63952195e-02 2.08602395e-02 2.68856140e+00
-1.77957587e+01 3.80475246e+00 7.51061703e-04 -1.47575880e+00
3.05655038e-01 -1.23293463e-02 -9.53463555e-01 9.39251272e-03
-5.25466633e-01]
36.49110328036133
獲得訓(xùn)練學(xué)習(xí)時(shí)設(shè)置的參數(shù):
print(model.get_params())
# {'n_jobs': 1, 'copy_X': True, 'normalize': False, 'fit_intercept': True}
評(píng)估模型
最經(jīng)常用的評(píng)估方法,越接近于1的效果越好:
print(model.score(data_X, data_y))
# 0.7406077428649427