讀入資料
import numpy as np import pandas as pd from sklearn.datasets import load_breast_cancer cancer = load_breast_cancer()
不過這是一個dict,還不是一個pandas dataframe。雖然Scikit-learn不需要一定使用dataframe,但這對清理資料有幫助,嘗試將之轉換成dataframe。
def to_dataframe():
df = pd.DataFrame(data=cancer['data'], columns=cancer['feature_names'])
df['target'] = cancer['target']
return df
class distribution
惡性與良性的分類各有多少呢?def class_distribution():
df = to_dataframe()
result = pd.Series({'malignant':len(df[df['target']==0]),
'benign':len(df[df['target']==1])})
return result
區分label與data
def split_data_label():
df = to_dataframe()
X = df[df.columns[:-1]]
y = df['target']
return X,y
製作75% : 25% training set vs test set
def training_set():
X, y = split_data_label()
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)
return X_train, X_test, y_train, y_test
train 1-NN classifier
def _1NN_classifier():
X_train, X_test, y_train, y_test = training_set()
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train, y_train)
return knn
使用classifier來預測
要製作input,這邊使用一個假的data,就是每個feature在dataframe的mean組成的feature vector。def predict():
cancerdf = to_dataframe()
means = cancerdf.mean()[:-1].values.reshape(1, -1)
knn = _1NN_classifier()
result = knn.predict(means)
return result
predict test set
當然我們要來evaluate estimator的好壞的話,還是要來測試test set:def predict_test_set():
X_train, X_test, y_train, y_test = training_set()
knn = _1NN_classifier()
result = knn.predict(X_test)
return result
Accuracy
最後可以檢驗此次training結果的accuracy:def answer_eight():
X_train, X_test, y_train, y_test = training_set()
knn = _1NN_classifier()
result = knn.score(X_test, y_test)
return result
這次training結果對training set以及test set中的兩種classes的accuracy如下:
沒有留言:
張貼留言