中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
sklearn庫的學習

網(wǎng)上有很多關(guān)于sklearn的學習教程,大部分都是簡單的講清楚某一個方面。其實最好的教程就是官方文檔(http://scikit-learn.org/stable/),但是官方文檔講述的太過于詳細,同時很多人對官方文檔的理解和結(jié)構(gòu)認識上都不能很好的把握。我寫這篇文章的目的是想用一篇文章講清楚整個sklearn庫,我會講清楚怎么樣用這個庫,而不是講清楚每一個知識點。(授人以魚不如授人以漁)(本文很多都是從實踐的角度出發(fā),也僅僅只代表我個人的認識)
本篇文章主要從兩個方面出發(fā):1,介紹sklearn官方文檔的類容和結(jié)構(gòu);2,從機器學習重要步驟出發(fā)講清楚sklearn的使用方法。

一、sklearn官方文檔的類容和結(jié)構(gòu)
1,機器學習的認識:從實踐的角度出發(fā),機器學學習要做的工作就是在我們有的一個數(shù)據(jù)集上建立一個或者多個模型,然后對我們的模型進行優(yōu)化和評估。我們將會在sklearn中看到下圖各個模塊到底是什么,怎么用。

2,sklearn庫官方文檔結(jié)構(gòu):
下圖表示:官方文檔有很多模塊:
tutorials:是一個官方教程,可以理解快速上手教程,但是看完感覺并沒有很快。
user guide(用戶指南):這里對每一個算法有詳細的介紹
API:這里是庫調(diào)用的方法
FAQ:常見問題
contributing:貢獻,還介紹最新的一些代碼,功能。
(下面三個就跟沒有用了)


總結(jié):一般的做法是API里面找到你要調(diào)用的方法,然后可以查看方法參數(shù)的情況和使用情況。也可以在指南里面找到具體的解釋。

3,sklearn庫的結(jié)構(gòu):


(1)結(jié)構(gòu):
由圖中,可以看到庫的算法主要有四類:分類,回歸,聚類,降維。其中:

  • 常用的回歸:線性、決策樹、SVM、KNN ;集成回歸:隨機森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
  • 常用的分類:線性、決策樹、SVM、KNN,樸素貝葉斯;集成分類:隨機森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
  • 常用聚類:k均值(K-means)、層次聚類(Hierarchical clustering)、DBSCAN
  • 常用降維:LinearDiscriminantAnalysis、PCA

(2)圖片中隱含的操作流程:
這個流程圖代表:藍色圓圈內(nèi)是判斷條件,綠色方框內(nèi)是可以選擇的算法。你可以根據(jù)自己的數(shù)據(jù)特征和任務目標去找到一條自己的操作路線,一步步做就好了。

二、機器學習主要步驟中sklearn應用
1,數(shù)據(jù)集:面對自己的任務肯定有自己的數(shù)據(jù)集,但是對于學習來說,sklearn提供了一些數(shù)據(jù),主要有兩部分:現(xiàn)在網(wǎng)上一些常用的數(shù)據(jù)集,可以通過方法加載;另一種sklearn可以生成數(shù)據(jù),可以生成你設(shè)定的數(shù)據(jù)。(設(shè)定規(guī)模,噪聲等)

下面是一段python實例:

from sklearn import datasetsfrom sklearn.linear_model import LinearRegressionimport matplotlib.pyplot as plt#使用以后的數(shù)據(jù)集進行線性回歸(這里是波士頓房價數(shù)據(jù))loaded_data=datasets.load_boston()data_X=loaded_data.datadata_y=loaded_data.targetmodel=LinearRegression()model.fit(data_X,data_y)print(model.predict(data_X[:4,:]))print(data_y[:4])#使用生成線性回歸的數(shù)據(jù)集,最后的數(shù)據(jù)集結(jié)果用散點圖表示X,y=datasets.make_regression(n_samples=100,n_features=1,n_targets=1,noise=10)   #n_samples表示樣本數(shù)目,n_features特征的數(shù)目  n_tragets  noise噪音plt.scatter(X,y)plt.show()

2,數(shù)據(jù)預處理:數(shù)據(jù)預處理包括:降維、數(shù)據(jù)歸一化、特征提取和特征轉(zhuǎn)換(one-hot)等,這在sklearn里面有很多方法,具體查看api。這里用歸一化(preprocessing.scale() )例子解釋一下:

from sklearn import preprocessing #進行標準化數(shù)據(jù)時,需要引入個包import numpy as npfrom sklearn.cross_validation import train_test_splitfrom sklearn.datasets.samples_generator import  make_classificationfrom sklearn.svm import SVCimport matplotlib.pyplot as pltX,y=make_classification(n_samples=300,n_features=2,n_redundant=0,n_informative=2,random_state=22,n_clusters_per_class=1,scale=100)#X=preprocessing.minmax_scale(X,feature_range=(-1,1))X=preprocessing.scale(X)   #0.966666666667 沒有 0.477777777778X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3)clf=SVC()clf.fit(X_train,y_train)print(clf.score(X_test,y_test))plt.scatter(X[:,0],X[:,1],c=y)plt.show()a=np.array([[10,2.7,3.6],            [-100,5,-2],            [120,20,40]],dtype=np.float64)   #每一列代表一個屬性print(a)       #標準化之前a     print(preprocessing.scale(a)) #標準化之后的a 

3,選擇模型并訓練: sklearn里面有很多的機器學習方法,可以查看api找到你需要的方法,sklearn統(tǒng)一了所有模型調(diào)用的api,使用起來還是比較簡單。

from sklearn import datasetsfrom sklearn.linear_model import LinearRegressionimport matplotlib.pyplot as plt#使用以后的數(shù)據(jù)集進行線性回歸loaded_data=datasets.load_boston()data_X=loaded_data.datadata_y=loaded_data.targetmodel=LinearRegression()model.fit(data_X,data_y)print(model.predict(data_X[:4,:]))print(data_y[:4])#參數(shù)print(model.coef_)      #如果y=0.1x+0.3   則此行輸出的結(jié)果為0.1print(model.intercept_)             #此行輸出的結(jié)果為0.3print(model.get_params())       #模型定義時定義的參數(shù),如果沒有定義則返回默認值print(model.score(data_X,data_y))   #給訓練模型打分,注意用在LinearR中使用R^2 conefficient of determination打分

4,模型評分:
(1)模型的score方法:最簡單的模型評估方法是調(diào)用模型自己的方法:

    #預測    y_predict = knnClf.predict(x_test)    print("score on the testdata:",knnClf.score(x_test,y_test))

(2)sklearn的指標函數(shù):庫提供的一些計算方法,常用的有classification_report方法

下面是一個svm分類器,是關(guān)于圖片分類的,具體數(shù)據(jù)這里沒有給出,大家只需要關(guān)注模型的評估就好。

def svmClassify(x_train, x_test, y_train, y_test):    id = range(1, x_test.shape[0]+1)    print("start run svm!")    #訓練    svc = svm.SVC(kernel='rbf', C=10,probability=True)    svc.fit(x_train, y_train)    #預測    y_predict = svc.predict(x_test)    print("svm mode's score on the test data:",svc.score(x_test,y_test))    print("svm mode's evaluate:",classification_report(y_test,y_predict))    # print(svc.coef_)  # 如果y=0.1x+0.3   則此行輸出的結(jié)果為0.1    # print(svc.intercept_)  # 此行輸出的結(jié)果為0.3    print(svc.get_params())  # 模型定義時定義的參數(shù),如果沒有定義則返回默認值    #可能性計算    probablity = svc.predict_proba(x_test)    list_pro = []    for i in range(probablity.shape[0]):        pro = max(list(probablity[i]))        list_pro.append(pro)    #輸出    index = np.array(id).reshape(-1,1)    result = pd.DataFrame(np.column_stack((np.array(id).reshape(-1, 1), np.array(y_test).reshape(-1, 1),np.array(y_predict).reshape(-1,1),np.array(list_pro).reshape(-1,1))),                          columns=['ImageId','test_label','predict_lable','probablity'])    result.to_csv("result/svm_result.csv", index=False, header=True, encoding='gbk')    diff_index = []    for i in range(result.shape[0]):        # print(result['test_label'][i], result['predict_lable'][i],)        diff_index.append(result['test_label'][i] != result['predict_lable'][i])    print(diff_index)    diff = result[diff_index]    diff_x = x_test_original[diff_index]    diff.to_csv('result/svm_result_diff.csv', index=False, header=True, encoding='gbk')    # 查看每個錯誤    for i in range(len(diff_index)):        # print("label is:",diff['test_label'][i],"predict is:",diff['predict_lable'][i])        print("test label is :", diff.iloc[i]['test_label'], 'predict label is :', diff.iloc[i]['predict_lable'])        x = diff_x[i]        img = x.reshape(28, 28)        image_show(img)

(3)sklearn也支持自己開發(fā)評價方法

5,模型的保存于恢復:模型的保存與恢復可以采用python的pickle,也可以用joblib的方法。

from sklearn import svmfrom sklearn import datasetsclf=svm.SVC()iris=datasets.load_iris()X,y=iris.data,iris.targetclf.fit(X,y)#method1:pickleimport pickle#savewith open('save/clf.pickle','wb')as f:    pickle.dump(clf,f)#restorewith open('save/clf.pickle','rb') as f:    clf=pickle.load(f)    print(clf.predict(X[0:1]))#method2:joblibfrom sklearn.externals import joblib#savejoblib.dump(clf,'save/clf.pkl')clf3=joblib.load('save/clf.pkl')print(clf3.predict(X[0:1]))

這是一篇入門的文章,希望入門的人有一個很好的引導,接下來我也會跟新一些重要的內(nèi)容。下一篇,我打算講解交叉驗證這個很重要的模塊。

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
機器學習入門實踐——鳶尾花分類
scikit
硬投票和軟投票
干貨|詳解支持向量機(附學習資源)
Python機器學習(十)經(jīng)典算法大全
端到端機器學習項目:評論分類
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服