1. 程式人生 > >利用 Python 練習資料探勘(鳶尾花練習)中遇到的問題,以及解決方法。

利用 Python 練習資料探勘(鳶尾花練習)中遇到的問題,以及解決方法。

大佬好,我是隻小菜鳥,目前正在學習資料探勘。在練習鳶尾花這個經典練習中,遇到一些問題,順便記錄一下。
原連結利用python練習資料探勘

一 獲取資料、

import urllib2
url = 'http://aima.cs.berkeley.edu/data/iris.csv'#資料地址
#獲取資料
u=urllib2.urlopen(url)
localfile=open("iris.csv","w")
localfile.write(u.read())
localfile.close()
#前4列包含著特徵值,最後一列代表著樣本型別。
data = genfromtxt('iris.csv'
,delimiter=',',usecols=(0,1,2,3))#新增資料,開啟文件,以逗號為分割,新增1,2,3,4列資料 target = genfromtxt('iris.csv',delimiter=',',usecols=(4),dtype=str)#新增目標,開啟資料文件,資料的第5列為資料目標,型別是str print data.shape >>>(150, 4) print target.shape >>>(150, ) #上面程式碼中,建立了一個包含特徵值的矩陣(data.shape)以及一個包含樣本型別的向量(target.shape) print set(target)#獲取樣本型別和名字
>>>set(['setosa', 'versicolor', 'virginica']) print data[target=='setosa',0]#列印目標為“setosa”的第一列的所有資料 >>>[ 5.1 4.9 ... 5.3 5. ]

二 繪圖、

1、點狀圖

from pylab import plot show
plot(data[target="setosa',0],data[target="setosa",2],"yo")#使用目標“setosa”的第一維度和第三維度作為引數,“yo”是指黃色點狀,如果是“y”是指黃色折線.
plot(data[target=='versicolor',0],data[target=='versicolor',2],'ro')#使用....作為引數,紅色點狀 plot(data[target=='virginica',0],data[target=='virginica',2],'go')#`這裡寫程式碼片`使用....作為引數,綠色點狀 show()

這是"yo"
上圖是引數為”yo”,”ro”,”go”

引數為"y"
上圖是引數為”y”,”r”,”g”

2、柱狀圖

from pylab import figure, subplot, hist, xlim, show
xmin = min(data[:,0])#最小值
xmax = max(data[:,0])#最大值
figure()
subplot(411) #第一種花瓣的集合,b代表藍色,alpha代表透明度,
hist(data[target=='setosa',0],color='b',alpha=1)
xlim(xmin,xmax)

subplot(412) # 第二紅花瓣集合
hist(data[target=='versicolor',0],color='r',alpha=1)
xlim(xmin,xmax)

subplot(413) # 第三種花瓣集合
hist(data[target=='virginica',0],color='g',alpha=1)
xlim(xmin,xmax)

subplot(414) # 區域性直方圖
hist(data[:,0],color='y',alpha=1)
xlim(xmin,xmax)

show()

至於為什麼是subplot是(411-414)我就不清楚了,百度一下是這樣的
百度知道的連結
“% subplot(行數目,列數目,當前第幾個圖)subplot(m, n, j);% 則表示一個figure裡面有m行,n列圖,現在繪製的是第j個圖。”
這裡寫圖片描述

三、分類

分類是一個數據挖掘方法,用於把一個數據集中的樣本資料分配給各個目標類。實現這個方法的模組叫做分類器。使用分類器需要以下兩步:訓練和分類。訓練是指採集已知其特定類歸屬的資料並基於這些資料建立分類器。 分類是指使用通過這些已知資料建立的分類器來處理未知的資料,以判斷未知資料的分類情況。

#字串陣列轉型成整型資料
t = zeros(len(target))
t[target == 'setosa'] = 1
t[target == 'versicolor'] = 2
t[target == 'virginica'] = 3

接下來的這一步原文中是這樣的:

from sklearn.naive_bayes import GaussianNB#匯入模組
classifier = GaussianNB()#例項化
classifier.fit(data,t)#分類器

錯誤

接下來在原文中是這樣的:
這裡寫圖片描述
但是實際執行的過程中是報錯的:
這裡寫圖片描述
錯誤資訊:
from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(data,t)

解決方法:

data[0]這一快加[]:
print classifier.predict([data[0]])

print classifier.predict([data[0]])
>>>[ 1.]
print t[0]
>>>1

簡單的訓練和測試已經完成,但是下面又出現一個問題:

問題:

原文中是這樣的:
這裡寫圖片描述
但是在實際中是:
這裡寫圖片描述
在2.0版本中,這個模組已經停止使用了。

解決方法:

from sklearn import cross_validation換成from sklearn.model_selection import train_test_split

from sklearn.model_selection import train_test_split
train, test, t_train, t_test =train_test_split(data, t, test_size=0.4, random_state=0)

今天先到這裡,日後在續!