4.3訓(xùn)練數(shù)據(jù)集页滚、測試數(shù)據(jù)集
1.判斷機器學(xué)習(xí)算法的性能
image.png
測試我們的算法
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
iris = datasets.load_iris()
x = iris.data
y = iris.target
train_test_split
將原始數(shù)據(jù)集拆分成兩部分,一部分是訓(xùn)練數(shù)據(jù)集滔韵,一部分是測試數(shù)據(jù)集逻谦。
# 先對原始數(shù)據(jù)進行隨機化,但是因為x.y對應(yīng)的關(guān)系陪蜻,所以隨機化處理是對應(yīng)關(guān)系應(yīng)該保持一致邦马。
# 隨機化方法:可以先把X.y合成一個矩陣然后隨機取出一部分數(shù)據(jù);另一種方法是先對y進行隨機化
# 形成15個索引的隨機序列
shuffle_indexes = np.random.permutation(len(X)
# 查看序列
shuffle_indexes
# 指定選取測試數(shù)據(jù)集的比例
test_ratio = 0.2
test_size = int(len(X) * test_ratio)
# 獲得測試數(shù)據(jù)集索引
test_indexes = shuffle_indexes[:test_size]
# 獲得訓(xùn)練數(shù)據(jù)集索引
train_indexes = shuffle_indexes[test_size:]
# 獲取測試和訓(xùn)練數(shù)據(jù)
X_train = X[train_indexes]
y_train = y[train_indexes]
X_test = X[test_indexes]
y_test = y[test_indexes]
創(chuàng)建model_selection.py文件
# 分割原始數(shù)據(jù)集為測試數(shù)據(jù)集和訓(xùn)練數(shù)據(jù)集
import numpy as np
def train_test_split(X, y, test_ratio=0.2, seed=None):
assert X.shape[0] == y.shape[0], \
"the size of X must be equal to the size of y"
assert 0.0 <= test_ratio <= 1.0, \
"test_ratio must be valid"
if seed:
np.random.seed(seed)
shuffled_indexes = np.random.permutation(len(X))
test_size = int(len(X * test_ratio))
test_indexes = shuffled_indexes[:test_size]
train_indexes = shuffled_indexes[test_size:]
X_train = X[train_indexes]
y_train = y[train_indexes]
X_test = X[test_indexes]
y_test = y[test_indexes]
return X_train, y_train, X_test, y_test
測試使用我們的算法
from playML.model_selection import train_test_split
X_train, y_train, X_test, y_test = train_test_split(X, y)
from playML.kNN2 import KNNClassifier
my_knn_clf = KNNClassifier(k=3)
my_knn_clf.fit(X_train, y_train)
y_predict = my_knn_clf.predict(X_test)
# 得出預(yù)測結(jié)果
y_predict
# 檢驗預(yù)測結(jié)果和實際結(jié)果
sum(y_predict == y_test)
# 計算預(yù)測準確率
sum(y_predict == y_test)/len(y_test)
sklearn中的train_test_split
from sklearn.model_selection import train_test_split
# random_state設(shè)置隨機種子
X_train, y_train, X_test, y_test = train_test_split(X, y, test_size=0.2, random_state=666)