我目前正在udacity上做 "機器學習入門 "的免費課程,其中有一個關于高斯奈夫貝葉斯的測驗。當在udacity環境中運行時,代碼給出了理想的輸出(如下圖所示 代碼在udacity環境下的輸出
。但是當我在jupyter notebook中運行它時,它顯示了錯誤,對于class_vis.py模塊,它顯示了錯誤'NoneType'物件沒有屬性'predict'(如下圖所示)。 jupyter notebook中的錯誤
。這里是所有模塊的代碼:-
- studentMain
- studentMain.py 。
Naive Bayes分類器來對地形資料進行分類。
這個練習的目的是重新創建決策
邊界,在課程視頻中發現,并制作一個圖表,以
直觀地顯示決策邊界""
from prep_terrain_data import makeTerrainData
from class_vis import prettyPicture, output_image
從 ClassifyNB匯入 classify
import numpy as np
import pylab as pl
features_train, labels_train, features_test, labels_test = makeTerrainData()
### 訓練資料(features_train, labels_train)有 "快 "和 "慢 "兩個點混在一起
###在一起--把它們分開,這樣我們就可以在散點圖中給它們不同的顏色。
###并在視覺上識別它們
grade_fast = [features_train[ii][0] for ii in range(0, len(features_train) ) if labels_train[ii]==0]
bumpy_fast = [features_train[ii][1] for ii in range(0, len(features_train)) if labels_train[ii]==0] 。
grade_slow = [features_train[ii][0] for ii in range(0, len(features_train)) if labels_train[ii]==1] 。
bumpy_slow = [features_train[ii][1] for ii in range(0, len(features_train)) if labels_train[ii]==1] 。
# 你需要完成這個從ClassifyNB腳本中匯入的函式。
# 一定要換到那個代碼標簽來完成這個測驗。
clf = classify(features_train, labels_train)
###畫出覆寫著文本點的決策邊界
prettyPicture(clf, features_test, labels_test)
output_image("test.png", "png", open("test.png", "rb").read()
- class_vis.py
#f from udacityplots import *。
import warnings
warnings.filterwarnings("ignore")
import matplotlib
matplotlib.use('agg')
import matplotlib.pyplot as plt
import pylab as pl
import numpy as np
#import numpy as np
#import matplotlib.pyplot as plt
#plt.ioff()/span>
def prettyPicture(clf, X_test, y_test)。
x_min = 0.0; x_max = 1.0。
y_min = 0.0; y_max = 1.0; y_max = 1.0。
# 繪制決策邊界。為此,我們將為每個分配一種顏色
# 網格中的點[x_min, m_max]x[y_min, y_max]。
h = .01 #網格中的步長。
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()] )
# 將結果放入一個彩色圖譜。
Z = Z.reshape(xx.shape)
plt.xlim(xx.min(), xx.max()
plt.ylim(yy.min(), yy.max()
plt.pcolormesh(xx, yy, Z, cmap=pl.cm.seismic)
# 繪制測驗點。
grade_sig = [X_test[ii][0] for ii in range(0, len(X_test) if y_test[ii]==0]
bumpy_sig = [X_test[ii][1] for ii in range(0, len(X_test) if y_test[ii]==0]
grade_bkg = [X_test[ii][0] for ii in range(0, len(X_test)) if y_test[ii]==1]
bumpy_bkg = [X_test[ii][1] for ii in range(0, len(X_test) if y_test[ii]==1]
plt.scatter(grade_sig, bumpy_sig, color = "b", label="fast" )
plt.scatter(grade_bkg, bumpy_bkg, color = "r", label="慢")
plt.legend()
plt.xlabel("bumpiness")
plt.ylabel("grade")
plt.savefig("test.png")
import base64
import json
import subprocess
def output_image(name, format, bytes) 。
image_start = "BEGIN_IMAGE_f9825uweof8jw9fj4r8"/span>.
image_end = "END_IMAGE_0238jfw08fjsiufhw8frs"/span>
資料={}。
data['name'] = name
data['format'] = format。
data['bytes'] = base64.encodestring(bytes)
print (image_start json.dumps(data) image_end)
- prep_terrain_data.py 。
#!/usr/bin/python。
import random
def makeTerrainData(n_points=1000)。
###############################################################################。
### make the toy dataset.
random.seed(42)
grade = [random.random() for ii in range(0,n_points)]
bumpy = [random.random() for ii in range(0,n_points)]
error = [random.random() for ii in range(0,n_points)]
y = [round(grade[ii]*bumpy[ii] 0.3 0.1*error[ii] ) for ii in range(0,n_points)]
for ii in range(0, len(y))。
if grade[ii]>0.8 or bumpy[ii] >0.8:
y[ii] = 1.0 1.0
### 分成訓練/測驗集。
X = [[gg, ss] for gg, ss in zip(grade, bumpy)]
split = int(0.75*n_points)
X_train = X[0: split]
X_test = X[split:]
y_train = y[0:split] 。
y_test = y[split:]
grade_sig = [X_train[ii][0] for ii in range(0, len(X_train)) if y_train[ii]==0]
bumpy_sig = [X_train[ii][1] for ii in range(0, len(X_train)) if y_train[ii]==0]
grade_bkg = [X_train[ii][0] for ii in range(0, len(X_train)) if y_train[ii]==1]
bumpy_bkg = [X_train[ii][1] for ii in range(0, len(X_train)) if y_train[ii]==1]
# training_data = {"fast":{"grade":grade_sig, "bumpiness":bumpy_sig})
# , "slow":{"grade":grade_bkg, "bumpiness":bumpy_bkg}}
grade_sig = [X_test[ii][0] for ii in range(0, len(X_test) if y_test[ii]==0]
bumpy_sig = [X_test[ii][1] for ii in range(0, len(X_test)) if y_test[ii]==0]
grade_bkg = [X_test[ii][0] for ii in range(0, len(X_test)) if y_test[ii]==1]
bumpy_bkg = [X_test[ii][1] for ii in range(0, len(X_test) if y_test[ii]==1]
test_data = {"fast":{"grade":grade_sig, "bumpiness":bumpy_sig} .
, "慢":{"grade":grade_bkg, "bumpiness":bumpy_bkg}}
return X_train, y_train, X_test, y_test
# return training_data, test_data
- ClassifyNB.py
#ClassifyNB.py。
def classify(features_train, labels_train)。
### import the sklearn module for GaussianNB.
### 創建分類器。
### 在訓練特征和標簽上擬合分類器。
### return the fit classifier[/span]。
### 你的代碼放在這里! ### 你的代碼放在這里
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
clf.fit(features_train,labels_train)
懇請幫助我解決什么是錯誤
。uj5u.com熱心網友回復:
在我看來,你的 classify 函式沒有回傳任何東西,但是你把它的回傳值分配給了一個變數,根據 python 標準,這個變數將被設定為 None。為了解決這個問題,請在分類函式中插入一個回傳陳述句:
def classify(features_train, labels_train)。
### import the sklearn module for GaussianNB.
### 創建分類器。
### 在訓練特征和標簽上擬合分類器。
### return the fit classifier[/span]。
### 你的代碼放在這里! ### 你的代碼放在這里
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
clf.fit(features_train,labels_train)
return clf
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329653.html
標籤:
