1. 鳶尾花 demo
檢查數(shù)據(jù)最好的方法是將其可視化惑淳,將所有數(shù)據(jù)放到一張圖表中,制作散點(diǎn)圖(scatter plot)谎懦。但是如果數(shù)據(jù)不是二維數(shù)據(jù)鲫咽,而是多維數(shù)據(jù)的話签赃,散點(diǎn)圖就不符合要求了,可以使用散點(diǎn)矩陣分尸。散點(diǎn)圖矩陣可以兩兩查看所有的特征锦聊。
pandas 有一個(gè)繪制散點(diǎn)圖矩陣的函數(shù),叫作scatter_matrix箩绍。矩陣的對(duì)角線是每個(gè)特征的直方圖孔庭。
2. KNN算法實(shí)現(xiàn)
sci-kit learn包中將KNN算法包裝為對(duì)象KNeighborsClassifier,將樣本區(qū)分出訓(xùn)練樣本(75%)和測(cè)試樣本(15%)。
fit圆到、predict 和 score 方法是scikit-learn 監(jiān)督學(xué)習(xí)模型中最常用的接口怎抛。
關(guān)于散點(diǎn)矩陣和knn預(yù)測(cè)的算法實(shí)現(xiàn)如下:
# -*- coding: UTF-8 -*-
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import pandas as pd
import matplotlib.pyplot as plt
import mglearn
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
if __name__ == '__main__':
# 獲取iris數(shù)據(jù)集 Bunch數(shù)據(jù)結(jié)構(gòu)
iris_data = load_iris()
print iris_data.keys()
print iris_data['target_names']
# 將樣本數(shù)據(jù)分成訓(xùn)練和測(cè)試數(shù)據(jù),默認(rèn)的比例是(75%和15%)
X_train, X_test , y_train, y_test = train_test_split(iris_data['data'], iris_data['target'], random_state=0)
print "訓(xùn)練集和測(cè)試集的樣本量:"
print X_train.shape
print X_test.shape
# 使用X_train數(shù)據(jù)制作散點(diǎn)矩陣
# 將iris_data轉(zhuǎn)化成pandas的DataFramefeature_names
X_train_dastaframe = pd.DataFrame(X_train, columns=iris_data['feature_names'])
grid = pd.plotting.scatter_matrix(X_train_dastaframe, c=y_train, figsize=(15,15),
marker='o', hist_kwds={'bins':20}, s=60, alpha=.8, cmap=mglearn.cm3)
plt.show()
knn = KNeighborsClassifier(n_neighbors=1)
# 使用訓(xùn)練集訓(xùn)練模型 fit方法返回的是knn 對(duì)象本身并做原處修改
knn.fit(X_train, y_train)
# 隨機(jī)一個(gè)樣本芽淡,二維數(shù)組马绝,并預(yù)測(cè)這個(gè)樣本的所屬歸類。
X_new = np.array([[5, 2.9, 1, 0.2]])
y_new_predict = knn.predict(X_new)
print "隨機(jī)樣本[[5, 2.9, 1, 0.2]]的預(yù)測(cè)結(jié)果:"
print iris_data['target_names'][y_new_predict]
# 對(duì)測(cè)試組數(shù)據(jù)進(jìn)行預(yù)測(cè)挣菲。使用knn 對(duì)象的score 方法來計(jì)算測(cè)試集的精度(測(cè)試集中歸類正確的樣本數(shù)/測(cè)試集中的樣本總數(shù))
y_test_predict = knn.predict(X_test)
y_test_score = knn.score(X_test,y_test)
print "測(cè)試集預(yù)測(cè)結(jié)果:"
print iris_data['target_names'][y_test_predict]
print "測(cè)試集預(yù)測(cè)精準(zhǔn)度:" + str(y_test_score)
3. 監(jiān)督學(xué)習(xí)
3.1 分類和回歸
監(jiān)督學(xué)習(xí)主要包括2種類型:分類問題和回歸問題富稻。區(qū)分分類和回歸問題的方法是觀察輸出結(jié)果,如果輸出結(jié)果是離散的(例如:是白胀、否)唉窃,那么就是分類問題,如果輸出結(jié)果是連續(xù)的(例如:實(shí)數(shù)區(qū)間)纹笼,那么就是回歸問題纹份。
3.2 泛化、過擬合和欠擬合
如果一個(gè)模型能夠?qū)]見過的數(shù)據(jù)做出準(zhǔn)確預(yù)測(cè)廷痘,我們就說它能夠從訓(xùn)練集泛化(generalize)到測(cè)試集蔓涧。我們想要構(gòu)建一個(gè)泛化精度盡可能高的模型。我們認(rèn)為簡(jiǎn)單的模型對(duì)新數(shù)據(jù)的泛化能力更好笋额。
構(gòu)建一個(gè)對(duì)現(xiàn)有信息量來說過于復(fù)雜的模型元暴,稱為過擬合(overfitting)。選擇過于簡(jiǎn)單的模型被稱為欠擬合(underfitting)兄猩。過擬合和欠擬合都不會(huì)得到模型最佳的泛化能力: