kaggle - mushroom
學習使用 scikit-learn
引入必要的套件
import numpy #數字運算
from sklearn.tree import DecisionTreeRegressor # 決策樹
from sklearn.preprocessing import LabelEncoder # 將string 替換成 int
from sklearn.model_selection import train_test_split # 將資料集劃分
from sklearn.externals import joblib #將 model 儲存下來
from sklearn.metrics import accuracy_score #測試predict 資料正確
import pandas as pd # 讀取 csv file
讀取資料
data = pd.read_csv("mushrooms.csv") #讀取資料
將字串資料進行轉換
例: 資料[ 'a' , 'b' , 'c'] -> [1,2,3]
labelencoder = LabelEncoder()
for col in data.columns:
data[col] = labelencoder.fit_transform(data[col])
將資料分開
y = data['class'].tolist() # 答案
X = data.iloc[0:,1:].values.tolist() # 運算數值
資料劃分
test_size = 0.2
代表 train 有 80% 資料
test 20%
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
資料訓練
clf = DecisionTreeRegressor(max_depth=10)
clf.fit(X_train,y_train)
predict_y = clf.predict(X_test).round() #資料會在0~1之間 用 round 取得最靠近的整數
訓練測試
print(accuracy_score(y_test , predict_y))
利用 joblib 儲存model
joblib.dump(clf , "clf.plk") #儲存
clf2 = joblib.load("clf.plk") #讀取
print(clf2.score(X_test , y_test)) #使用
全程式:
import numpy #數字運算
from sklearn.tree import DecisionTreeRegressor # 決策樹
from sklearn.preprocessing import LabelEncoder # 將string 替換成 int
from sklearn.model_selection import train_test_split # 將資料集劃分
from sklearn.externals import joblib #將 model 儲存下來
import pandas as pd # 讀取 csv file
data = pd.read_csv("mushrooms.csv") #讀取資料
labelencoder = LabelEncoder()
for col in data.columns:
data[col] = labelencoder.fit_transform(data[col])
y = data['class'].tolist() # 答案 y
X = data.iloc[0:,1:].values.tolist() # 運算數值
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
clf = DecisionTreeRegressor(max_depth=10)
print(numpy.shape(X_train))
print(numpy.shape(X_test))
clf.fit(X_train,y_train)
predict_y = clf.predict(X_test)
print(clf.score(X_test , y_test))
joblib.dump(clf , "clf.plk")
clf2 = joblib.load("clf.plk")
print(clf2.score(X_test , y_test))
第一次做這種練習
有很多參數都沒去使用
預測做出來幾乎都是 1.0
如果 max_depth 調的低一點
會變得低一些
我也不知道做的對不對
統整學到的方法
pd.read_csv() 讀取 csv
labelencoder.fit_transform() 將字串資料 進行編號
train_test_split() 分拆資料集
DecisionTreeRegressor() 決策樹
clf.fit() 決策樹訓練
clf.predict(X_test) 預測
accuracy_score() 將結果評分
joblib.dump() 將 學習 model 儲存
clf2 = joblib.load() 將學習model 載入
沒有留言:
張貼留言