Python機(jī)器學(xué)習(xí)基礎(chǔ)教程學(xué)習(xí)筆記(2)——KNN處理Iris數(shù)據(jù)集

Python機(jī)器學(xué)習(xí)基礎(chǔ)教程學(xué)習(xí)筆記(2)——KNN處理Iris數(shù)據(jù)集

1 常規(guī)引用

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import mglearn

2 加載數(shù)據(jù)集

from sklearn.datasets import load_iris
iris_dataset = load_iris()
# Bunch對(duì)象暴匠,和字典相似
print("keys of iris_dataset: \n{}".format(iris_dataset.keys()))
keys of iris_dataset: 
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])
print('target names:{}'.format(iris_dataset['target_names']))# 要預(yù)測(cè)的花的品種
print('feature names:{}'.format(iris_dataset['feature_names']))# 特征
target names:['setosa' 'versicolor' 'virginica']
feature names:['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
print("type of data :{}".format(type(iris_dataset['data'])))# 數(shù)據(jù)的類型
print("shape of data :{}".format(iris_dataset['data'].shape))# 數(shù)據(jù)形狀,150條記錄榕酒,每條記錄4個(gè)特征值岔帽,(樣本數(shù),特征數(shù))
type of data :<class 'numpy.ndarray'>
shape of data :(150, 4)
print("first five rows of data:\n{}".format(iris_dataset['data'][:5]))
first five rows of data:
[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
 [4.7 3.2 1.3 0.2]
 [4.6 3.1 1.5 0.2]
 [5.  3.6 1.4 0.2]]
print("type of target:{}".format(type(iris_dataset['target'])))
print("shape of target:{}".format(iris_dataset['target'].shape))
type of target:<class 'numpy.ndarray'>
shape of target:(150,)
print("target:\n{}".format(iris_dataset['target']))
target:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]

3 拆分訓(xùn)練集和測(cè)試集

# train_test_split 打亂數(shù)據(jù)集并進(jìn)行拆分荠雕,75%的數(shù)據(jù)作為訓(xùn)練集,剩下的25作為測(cè)試集
from sklearn.model_selection import train_test_split
# random_state參數(shù)指定了隨機(jī)數(shù)生成器的種子
X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'],iris_dataset['target'],random_state=0)
# train的數(shù)據(jù)是112個(gè),為150的75%
print("X_train shape :{}".format(X_train.shape))
print("y_train shape :{}".format(y_train.shape))
X_train shape :(112, 4)
y_train shape :(112,)
# train的數(shù)據(jù)是112個(gè)唉堪,為150的75%
print("X_test shape :{}".format(X_test.shape))
print("y_test shape :{}".format(y_test.shape))
X_test shape :(38, 4)
y_test shape :(38,)

4 構(gòu)建dataframe并可視化

觀察數(shù)據(jù):

  • 看看如果不用機(jī)器學(xué)習(xí)能不能輕松完成任務(wù)
  • 需要的信息有沒有包含在數(shù)據(jù)中
  • 檢查數(shù)據(jù)也是發(fā)現(xiàn)異常值和特殊值的好辦法
  • 檢查數(shù)據(jù)的最佳方法之一就是將其可視化
  • 散點(diǎn)圖(sactter plot)能做二個(gè)特征的可視化,多個(gè)特征時(shí)肩民,可以做散點(diǎn)圖矩陣(pair plot)
# 利用X_train中的數(shù)據(jù)創(chuàng)建DataFrame
# 利用iris_dataset.feature_names中的字符串對(duì)數(shù)據(jù)列進(jìn)行標(biāo)記
iris_dataframe = pd.DataFrame(X_train,columns=iris_dataset.feature_names)
# 通過pd.plotting.scatter_matrix繪制散點(diǎn)圖矩陣唠亚,從圖中,看出可以通過四個(gè)特征將三種花區(qū)分開
grr = pd.plotting.scatter_matrix(
    iris_dataframe, # 數(shù)據(jù)集
    c=y_train, # c是指color持痰,設(shè)置點(diǎn)的顏色灶搜,這里沒指定顏色,通過下面的cmap來設(shè)置顏色工窍,這個(gè)參數(shù)是由scatter_matrix方法傳到scatter方法的
    figsize=(15,15), # 大懈盥簟(寬,高)
    marker='o', # 標(biāo)注點(diǎn)的樣式患雏,我所知道的'.'是小圓點(diǎn)鹏溯,'o'是大圓點(diǎn),'^'是上三角淹仑,'v'是下三角
    hist_kwds={'bins':20}, # other plotting keyword arguments To be passed to hist function ? 目測(cè)和柱型圖的寬有關(guān)
    s=60, # The size of each point. 這個(gè)參數(shù)是由scatter_matrix方法傳到scatter方法的
    alpha=.8, # 透明度
    cmap=mglearn.cm3 # 這個(gè)參數(shù)是由scatter_matrix方法傳到scatter方法的丙挽,然后scatter方法里,把傳給plotting方法
)
output_17_0

5 用knn分類算法進(jìn)行分類

knn算法

  • k近鄰分類器
  • 只保存訓(xùn)練集的數(shù)據(jù)
  • 對(duì)新數(shù)據(jù)點(diǎn)進(jìn)行預(yù)測(cè)匀借,算法會(huì)在訓(xùn)練集中尋找與這個(gè)新數(shù)據(jù)點(diǎn)距離最近的數(shù)據(jù)點(diǎn)颜阐,然后將找到的數(shù)據(jù)點(diǎn)的標(biāo)簽賦值給這個(gè)新數(shù)據(jù)點(diǎn)
  • k的含義是,訓(xùn)練集中與新數(shù)據(jù)點(diǎn)最近的任意的k個(gè)鄰居(比如3個(gè)或者5個(gè))吓肋,用這些鄰居中數(shù)量最多的類別做出預(yù)測(cè)凳怨。

5.1 訓(xùn)練

from sklearn.neighbors import KNeighborsClassifier
# n_neighbors=1,設(shè)置knn算法中的k值為1蓬坡,只考慮最近的一個(gè)鄰居數(shù)據(jù)點(diǎn)猿棉。
knn = KNeighborsClassifier(n_neighbors=1)
# 調(diào)用knn對(duì)象的fit方法進(jìn)行訓(xùn)練磅叛,輸入?yún)?shù)為X_train(訓(xùn)練數(shù)據(jù))和y_train(訓(xùn)練標(biāo)簽)。
knn.fit(X_train,y_train)
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
           metric_params=None, n_jobs=None, n_neighbors=1, p=2,
           weights='uniform')

5.2 預(yù)測(cè)

X_new = np.array([[5,2.9,1,0.2]])#必須是二維數(shù)組萨赁,才能傳入到predict方法中
print("X_new.shape:{}".format(X_new.shape))
X_new.shape:(1, 4)
prediction = knn.predict(X_new)
print("Prediction:{}".format(prediction))
print("Predicted target name:{}".format(iris_dataset["target_names"][prediction]))
Prediction:[0]
Predicted target name:['setosa']

6 評(píng)價(jià)模型

6.1 方法1

y_pred = knn.predict(X_test)
print("Test set predictions\n{}".format(y_pred))
Test set predictions
[2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0 2 1 0 2 2 1 0
 2]
print("Test set score:{:.2f}".format(np.mean(y_pred==y_test)))
Test set score:0.97

6.2 直接調(diào)用knn.score

print("Test set score:{:.2f}".format(knn.score(X_test,y_test)))
Test set score:0.97

7 小結(jié)

fit弊琴、predictscore方法是scikit-learn監(jiān)督學(xué)習(xí)模型中最常用的接口杖爽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末敲董,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子慰安,更是在濱河造成了極大的恐慌腋寨,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件化焕,死亡現(xiàn)場(chǎng)離奇詭異萄窜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)撒桨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門查刻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凤类,你說我怎么就攤上這事穗泵。” “怎么了谜疤?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵佃延,是天一觀的道長。 經(jīng)常有香客問我夷磕,道長履肃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任坐桩,我火速辦了婚禮榆浓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撕攒。我一直安慰自己,他們只是感情好烘浦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布抖坪。 她就那樣靜靜地躺著,像睡著了一般闷叉。 火紅的嫁衣襯著肌膚如雪擦俐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天握侧,我揣著相機(jī)與錄音蚯瞧,去河邊找鬼嘿期。 笑死,一個(gè)胖子當(dāng)著我的面吹牛埋合,可吹牛的內(nèi)容都是我干的备徐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼甚颂,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蜜猾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起振诬,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蹭睡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后赶么,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肩豁,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年辫呻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了清钥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡印屁,死狀恐怖循捺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雄人,我是刑警寧澤从橘,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站础钠,受9級(jí)特大地震影響恰力,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旗吁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一踩萎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧很钓,春花似錦香府、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至袁稽,卻和暖如春勿璃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國打工补疑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留歧沪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓莲组,卻偏偏與公主長得像诊胞,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胁编,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容