本文目錄一覽:
python中什麼是測試數據和訓練數據
當數據量特別大的時候,有幾千幾萬條,為了驗證模型的好壞,取出一部分用於訓練,另一部分用作測試。當模型訓練好的時候,其必定是符合訓練數據的分布,為了驗證模型的泛化能力,就利用沒有參與訓練的測試集,放入模型計算出結果,和真實值比較,就可以看出回歸模型預測得準不準了
從代碼來看你這個做的是一個簡單的線性回歸模型,數據很簡單就是研發成本對應產品質量,利用線性回歸擬合一條直線,由於你的數據特別少只有8個點,所以完全沒有必要區分訓練數據和測試數據,尤其你設置測試集比例為0.1,其實就只有一條,用處不大,所以沒有區分的必要
希望我的回答能幫助到你,祝你學習順利
python怎麼從一個文件中讀取訓練集
在讀取文件之前,我們先創建一個文本文件resource.txt作為源文件。
resource.txt
my name is joker,
I am 18 years old,
How about you?
如何讀取文件全部內容,我們編寫到reader.py文件中。
reader.py
1 with open(‘resource.txt’) as file_obj:2 content = file_obj.read()3 print(content)4
需要注意的是需要將resource.txt文件與read.py 放在同一目錄下。
運行後的結果如下:
解釋:open函數接收一個參數,此參數為將被讀取內容的文件名,在調用之後返回表示這個文件的對象,Python將之存儲在後面的變數(file_obj)中,關鍵字 with 在我們不再需要使用文件的時候將其關閉。
上面的代碼中open() 函數中傳入的是一個相對路徑,相對路徑會從當前文件(reader.py)所在文件夾下查找指定文件(resource.txt),如果文件不在當前文件夾下,可以使用絕對路徑。Linux系統絕對路徑如:
/home/joker/dic這樣的,Windows系統的絕對路徑如:C:/pyhton_workspace/dic 這樣的。
python svm 怎麼訓練模型
支持向量機SVM(Support Vector Machine)是有監督的分類預測模型,本篇文章使用機器學習庫scikit-learn中的手寫數字數據集介紹使用Python對SVM模型進行訓練並對手寫數字進行識別的過程。
準備工作
手寫數字識別的原理是將數字的圖片分割為8X8的灰度值矩陣,將這64個灰度值作為每個數字的訓練集對模型進行訓練。手寫數字所對應的真實數字作為分類結果。在機器學習sklearn庫中已經包含了不同數字的8X8灰度值矩陣,因此我們首先導入sklearn庫自帶的datasets數據集。然後是交叉驗證庫,SVM分類演算法庫,繪製圖表庫等。
12345678910
#導入自帶數據集from sklearn import datasets#導入交叉驗證庫from sklearn import cross_validation#導入SVM分類演算法庫from sklearn import svm#導入圖表庫import matplotlib.pyplot as plt#生成預測結果準確率的混淆矩陣from sklearn import metrics
讀取並查看數字矩陣
從sklearn庫自帶的datasets數據集中讀取數字的8X8矩陣信息並賦值給digits。
12
#讀取自帶數據集並賦值給digitsdigits = datasets.load_digits()
查看其中的數字9可以發現,手寫的數字9以64個灰度值保存。從下面的8×8矩陣中很難看出這是數字9。
12
#查看數據集中數字9的矩陣digits.data[9]
以灰度值的方式輸出手寫數字9的圖像,可以看出個大概輪廓。這就是經過切割並以灰度保存的手寫數字9。它所對應的64個灰度值就是模型的訓練集,而真實的數字9是目標分類。我們的模型所要做的就是在已知64個灰度值與每個數字對應關係的情況下,通過對模型進行訓練來對新的手寫數字對應的真實數字進行分類。
1234
#繪製圖表查看數據集中數字9的圖像plt.imshow(digits.images[9], cmap=plt.cm.gray_r, interpolation=’nearest’)plt.title(‘digits.target[9]’)plt.show()
設置模型的特徵X和預測目標Y
查看數據集中的分類目標,可以看到一共有10個分類,分布為0-9。我們將這個分類目標賦值給Y,作為模型的預測目標。
12
#數據集中的目標分類digits.target
12
#將數據集中的目標賦給YY=digits.target
手寫數字的64個灰度值作為特徵賦值給X,這裡需要說明的是64個灰度值是以8×8矩陣的形式保持的,因此我們需要使用reshape函數重新調整矩陣的行列數。這裡也就是將8×8的兩維數據轉換為64×1的一維數據。
123
#使用reshape函數對矩陣進行轉換,並賦值給Xn_samples = len(digits.images)X = digits.images.reshape((n_samples, 64))
查看特徵值X和預測目標Y的行數,共有1797行,也就是說數據集中共有1797個手寫數字的圖像,64列是經過我們轉化後的灰度值。
12
#查看X和Y的行數X.shape,Y.shape
將數據分割為訓練集和測試集
將1797個手寫數字的灰度值採用隨機抽樣的方法分割為訓練集和測試集,其中訓練集為60%,測試集為40%。
12
#隨機抽取生成訓練集和測試集,其中訓練集的比例為60%,測試集40%X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, Y, test_size=0.4, random_state=0)
查看分割後的測試集數據,共有1078條數據。這些數據將用來訓練SVM模型。
12
#查看訓練集的行數X_train.shape,y_train.shape
對SVM模型進行訓練
將訓練集數據X_train和y_train代入到SVM模型中,對模型進行訓練。下面是具體的代碼和結果。
12
#生成SVM分類模型clf = svm.SVC(gamma=0.001)
12
#使用訓練集對svm分類模型進行訓練clf.fit(X_train, y_train)
使用測試集測對模型進行測試
使用測試集數據X_test和y_test對訓練後的SVM模型進行檢驗,模型對手寫數字分類的準確率為99.3%。這是非常高的準確率。那麼是否真的這麼靠譜嗎?下面我們來單獨測試下。
12
#使用測試集衡量分類模型準確率clf.score(X_test, y_test)
我們使用測試集的特徵X,也就是每個手寫數字的64個灰度值代入到模型中,讓SVM模型進行分類。
12
#對測試集數據進行預測predicted=clf.predict(X_test)
然後查看前20個手寫數字的分類結果,也就是手寫數字所對應的真實數字。下面是具體的分類結果。
12
#查看前20個測試集的預測結果predicted[:20]
再查看訓練集中前20個分類結果,也就是真實數字的情況,並將之前的分類結果與測試集的真實結果進行對比。
12
#查看測試集中的真實結果expected=y_test
以下是測試集中前20個真實數字的結果,與前面SVM模型的分類結果對比,前20個結果是一致的。
12
#查看測試集中前20個真實結果expected[:20]
使用混淆矩陣來看下SVM模型對所有測試集數據的預測與真實結果的準確率情況,下面是一個10X10的矩陣,左上角第一行第一個數字60表示實際為0,SVM模型也預測為0的個數,第一行第二個數字表示實際為0,SVM模型預測為1的數字。第二行第二個數字73表示實際為1,SVM模型也預測為1的個數。
12
#生成準確率的混淆矩陣(Confusion matrix)metrics.confusion_matrix(expected, predicted)
從混淆矩陣中可以看到,大部分的數字SVM的分類和預測都是正確的,但也有個別的數字分類錯誤,例如真實的數字2,SVM模型有一次錯誤的分類為1,還有一次錯誤分類為7。
python機器學習訓練的數據存在mysql可以嗎
當然可以了, mysql是一種很常用的數據存儲的工具, 當你需要使用這些訓練數據時, 只需要通過python的mysql的包連接到資料庫, 執行查詢sql,將數據導入到python的變數就可以拿來用, 十分方便.如果不知道怎麼用python讀寫mysql資料庫, 請追問.
原創文章,作者:LEKX,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/147493.html