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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

机器学习--digits手写字体

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习--digits手写字体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.導入數據

import numpy as np import matplotlib.pyplot as plt from sklearn import neighbors,datasets,cross_validation #交叉驗證#定義一個加載數據集函數 def load_classification_data():digits = datasets.load_digits() #手寫數字print('數據集說明,大小:',digits.data.shape ) #data中的圖片數據是一行64列print('一張圖片的數據:',digits.data[0]) #圖片數據print('數據集中的鍵:',digits.keys())print( 'target:',digits.target[0:50])print( 'images:',digits.images[0:1]) #image中是多個二維數組成 每個二維數組就是一個數據x_train = digits.datay_train = digits.target# cross_validation.train_test_split() 數據集與測試集的拆分 random_state=0 隨機return cross_validation.train_test_split( x_train,y_train,test_size=0.25,random_state=0,stratify=y_train) #stratify分層采樣#加載訓練數據以及測試數據 x_train,x_test,y_train,y_test=load_classification_data()

得到以上輸出結果,如下圖:
2.數據分析
digits手寫數據集其實是1797組8*8的手寫數字圖像的像素點集合。有10個分類,代表了“0,1,2,…,9”這是個數字。特征維度為64,對應了每組數據的8 * 8個像素點。
通過分析,我們可以查看一下具體數據

print( y_train[0:20]) #輸出前二十個數據 print( x_train[0:1]) #輸出第一組數據 print(y_train[0:1]) #輸出y_train第一個數據 #多分類問題 數據集中是圖片數據 8*8矩陣

3.顯示圖片

通過上述介紹,我們已經了解到了這是一個手寫的數據集,通過每一組數據可以得到某些數據,那么下面我們來具體看一下:

#顯示一下圖片 digits = datasets.load_digits() #加載數據 import matplotlib.pyplot as plt %matplotlib inline print( x_train[0:1] ) plt.figure(figsize=(8,8)) plt.imshow( digits.images[1]) print( '標準結果:',digits.target[1])


上面的圖片就是得到的手寫的**‘1’**

4.測試KNeighborsClassifier的用法

def test_KNeighborsClassifier(*data): # *代表自動解包 *data->列表參數'''測試KNeighborsClassifier的用法:param data 可變參數 是一個元組 要求其元素為:訓練樣本集、測試樣本集、訓練樣本的標記、測試樣本的標記:return: None'''X_train,X_test,y_train,y_test = dataclf = neighbors.KNeighborsClassifier()clf.fit(X_train,y_train)print( "模型在訓練集中的評分:%f" % clf.score(X_train,y_train))print("模型在測試集中的評分:%f" % clf.score(X_test,y_test))test_KNeighborsClassifier(x_train,x_test,y_train,y_test)

5.做交叉驗證

def test_KNeighborsClassifier_k_w(*data):'''測試 KNeighborsClassifier 中 n_neighbors 和 weights 參數(投票策略) 的影響:param data:可變參數。它是一個元組,這里要求其元素依次為:訓練樣本集、測試樣本集、訓練樣本的標記、測試樣本的標記:return: None'''X_train,X_test,y_train,y_test=data#k的取值 從1到 數據集的大小( train: 1749*0.75 =1190)# linspace:在指定的間隔內返回均勻間隔的數字# num:#生成100個數 endpoint:是否包括最后一個數值 1 1189Ks= np.linspace(1,y_train.size,num = 100, endpoint=False,dtype='int')print( len(Ks) ) #100print( Ks )weights = ['uniform','distance'] #uniform權重相等 distance距離權重fig = plt.figure( figsize=(10,10))ax = fig.add_subplot(1,1,1) #子圖 ax 畫布的軸#繪制不同 weights 下,預測隨機得分隨 n_neighbors 的曲線for weight in weights:training_scores=[] testing_scores = []for K in Ks:clf = neighbors.KNeighborsClassifier(weights=weight,n_neighbors = K )clf.fit(X_train,y_train)testing_scores.append( clf.score(X_test,y_test))training_scores.append(clf.score(X_train,y_train))#k值為x,評分為yax.plot(Ks,testing_scores,label="testing score:weight=%s"%weight)ax.plot(Ks,training_scores,label="training score:weight=%s"%weight)ax.legend(loc='best')ax.set_xlabel("K")ax.set_ylabel("score")ax.set_ylim(0,1.05) #y刻度的極限ax.set_title("KNeighborsClassifier")plt.show()test_KNeighborsClassifier_k_w(x_train,x_test,y_train,y_test)

6.超參數搜索/網格搜索
此處具體參數設置請參照官網 :GridSearchCV

from sklearn.model_selection import GridSearchCV ps = [1,2,10] #指定 距離度量算法 ks = [4,5,6,7,8,9,10] #指定k的數量 ws = ['uniform','distance'] #指定權重算法 param_grid = {'p':ps,'n_neighbors':ks,'weights':ws} clf = GridSearchCV(neighbors.KNeighborsClassifier(),param_grid,cv = 5) clf.fit( x_train,y_train)

輸出最優參數組合

print('最佳結果:%0.3f' % clf.best_score_ ) print('最優參數組合:') best_parameters = clf.best_estimator_.get_params() for param_name in sorted(param_grid.keys() ):print( '\t%s:%r' %(param_name,best_parameters[param_name]))

使用最優參數重新測試

digits=datasets.load_digits() clf=neighbors.KNeighborsClassifier(p=2,n_neighbors=4,weights='uniform') clf.fit(x_train,y_train) y_predict = clf.predict(x_test) print('KNN Classifier 準確率為:' ,clf.score(x_test,y_test))

總結

以上是生活随笔為你收集整理的机器学习--digits手写字体的全部內容,希望文章能夠幫你解決所遇到的問題。

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