現(xiàn)在我們已經(jīng)從文文件中導(dǎo)入了數(shù)據(jù),并將其格式化為想要的格式,接著我們需要了解數(shù)據(jù)的真是含義,我們可以直觀的瀏覽文本文件,但是這種方法非常不友好,一般來說,我們會(huì)采用圖形化的方式直觀的展示數(shù)據(jù)。下面我們就用Python圖形化工具來圖形化展示數(shù)據(jù)內(nèi)容,以便辨識(shí)出一些數(shù)據(jù)模式。
- 分析數(shù)據(jù),使用
Matplotlib
創(chuàng)建散點(diǎn)圖
pip install matplotlib
接下來打開python命令行,我們對(duì)剛才讀入的內(nèi)容進(jìn)行測(cè)試的展示
>>> from matplotlib import *>>> import matplotlib.pyplot as plt>>> import kNN>>> import numpy as np>>> mat, vec = kNN.file2matrix('datingTestSet2.txt')>>> fig = plt.figure()>>> ax = fig.add_subplot(111)>>> ax.scatter(mat[:, 1], mat[:, 2], 15.0*np.array(vec), 15.0*np.array(vec))<matplotlib.collections.PathCollection object at 0x1087cf0d0>>>> plt.show()
這個(gè)時(shí)候,我們展示的是數(shù)據(jù)集的第一列與第二列所繪制的圖,這里我們很難看出來什么端倪,所以我們嘗試使用第一列和第二列作為特征來繪圖,重新書寫上邊代碼:
ax.scatter(mat[:, 0], mat[:, 1], 15.0*np.array(vec), 15.0*np.array(vec))
然后我們得到了以下數(shù)據(jù)圖:
這次,我們可以看到,圖中清晰的標(biāo)識(shí)了3個(gè)不同的樣本分類區(qū)域。
- 準(zhǔn)備數(shù)據(jù),歸一化數(shù)值
我們隨便的抽取了4組差異比較大的數(shù)據(jù)
玩游戲所消耗時(shí)間里程數(shù)冰激凌公升數(shù)樣本分類10.84000.51212134000.9330200001.12467320000.12我們很容易發(fā)現(xiàn),如果我們計(jì)算樣本3和樣本4之間的距離,可以使用下邊的方法
$\sqrt{(0-67)^2 + (20000 + 32000)^2 + (1.1-0.1)^2}$
但是這些大的值堆結(jié)果的影響比較大,因此,作為比較重要的特征屬性,不應(yīng)該如此的影響計(jì)算結(jié)果,所以在處理數(shù)據(jù)的時(shí)候,我們對(duì)數(shù)據(jù)進(jìn)行歸一化處理,將取值的范圍處理到0 - 1或者-1 ~ -1之間,下面的公事,可以將任意范圍內(nèi)的特征值轉(zhuǎn)換為0-1區(qū)間內(nèi)的值: