1. 程式人生 > >《機器學習(周志華)》 習題5.5答案

《機器學習(周志華)》 習題5.5答案

程式設計實現標準BP演算法(sgd)和累積BP演算法(fullbatch),在西瓜3.0上訓練一個單隱層網路,並進行比較。

需要先把字串轉成數字,這裡用one-hot。把二分類問題看成多分類問題的特例,然後用softmax。最終模型在訓練集上可達到100%準確率,並且在西瓜[email protected]上也可以達到100%,與前面的邏輯迴歸相比,多了一個隱層的非線性變換,模型的表達能力確實強大了很多!

經試驗,隱層大小至少為2,為1時很難訓練到百分之百準確率,隱層較大時,模型收斂更快。sgd和fullbatch相比,當模型還未收斂時,用同樣的epoch,sgd比fullbatch誤差高,但sgd時間更短。不過用同樣的時間訓練,sgd可能更容易達到收斂狀態。

程式碼如下:

# coding: utf-8
import pandas as pd 
from pandas import read_csv
import theano
import theano.tensor as T 
import numpy as np 
from theano.tensor.nnet import sigmoid, softmax, binary_crossentropy
import numpy.random as rng
import time 
import random

def one_hot_encoder(data):
	diff_type = []
	for i in data:
		if i not in diff_type:
			diff_type.append(i)
	ret = []
	for i in data:
		idx = diff_type.index(i)
		ret.append([1 if j==idx else 0 for j in range(len(diff_type))])
	return ret

pd = read_csv('西瓜資料集3.csv'.decode('utf-8'))
for i in pd.columns[1:-3]:
	pd[i] = one_hot_encoder(pd[i])

X = []
label = []
for raw in pd.values:
	tem = []
	for j in range(1, len(raw)-1):
		if type(raw[j]) is list:
			tem.extend(raw[j])
		else:
			tem.append(raw[j])
	X.append(tem)
	label.append(1 if raw[-1]=='是' else 0)
Y = one_hot_encoder(label)
# X = [raw[-2:] for raw in X] # 西瓜
[email protected]
的資料 x = T.matrix('x') y = T.matrix('y') feats = len(X[0]) h1_size = 20 ou_size = 2 w1 = theano.shared(rng.normal(size=(feats,h1_size)), name='w1') w2 = theano.shared(rng.normal(size=(h1_size,ou_size)), name='w2') b1 = theano.shared(rng.normal(size=h1_size), name='b1') b2 = theano.shared(rng.normal(size=ou_size), name='b2') z1 = T.dot(x, w1) + b1 h1 = sigmoid(z1) z2 = T.dot(h1, w2) + b2 h2 = softmax(z2) pred_maxid = T.argmax(h2, axis=1) cost = binary_crossentropy(h2, y).mean() gw1, gb1, gw2, gb2 = theano.grad(cost, [w1, b1, w2, b2]) lrate = 1 max_epochs = 10000 fit = theano.function(inputs=[x, y], outputs=[cost], updates=( (w1, w1-lrate*gw1), (w2, w2-lrate*gw2), (b1, b1-lrate*gb1), (b2, b2-lrate*gb2)) ) predict = theano.function(inputs=[x], outputs=[pred_maxid]) t1 = time.time() for i in range(max_epochs): # fit(X, Y) # full-batch choose = rng.randint(len(X)) fit([X[choose]], [Y[choose]]) # sgd # if i%100==0: # print fit(X, Y)[0] print 'training time:', time.time()-t1 print 'cost:', fit(X, Y)[0] maxid = predict(X)[0] pred_res = [True if i==0 else False for i in maxid] print 'predict result:' print pred_res print 'accuracy:' print float(sum([1 if label[i]==pred_res[i] else 0 for i in range(len(label))])) / len(label)


相關推薦

機器學習習題3.3

           本人菜鳥一枚,由於需要完成作業,所以嘗試使用機器學習工具庫去解決該題(周志華《機器學習》3.3題),主要參考別人的程式碼進行了改寫,如有不足請多多指教!            以下附上本題程式碼 import tensorflow as tf fro

機器學習第四章習題解答

轉自:http://blog.csdn.NET/wzmsltw/article/details/51059394 本文是對周志華的《機器學習》的習題解答,文章整理的很好,為方便之後檢視,記錄如下~ ~~~ 注:本文中的程式碼均使用Python,常用工具包包括 pandas,

機器學習》Chapter1 緒論 課後習題答案

表1.1 包含4個樣例,3種屬性,假設空間中有3 * 4 * 4 + 1 = 49種假設。在不考慮冗餘的情況下,最多包含k個合取式來表達假設空間,顯然k的最大值是49,每次從中選出k個來組成析合式,共​種可能。但是其中包含了很多沉餘的情況(至少存在一個合取式被剩餘的析合式完全

機器學習習題10.1 答案

程式設計實現K鄰近分類器,在西瓜資料集[email protected](屬性只有密度與含糖率)上,比較其分類邊界與決策樹分類邊界之異同。 KNN用歐式距離計算,投票時根據距離加權,在訓練集

機器學習習題5.5答案

程式設計實現標準BP演算法(sgd)和累積BP演算法(fullbatch),在西瓜3.0上訓練一個單隱層網路,並進行比較。 需要先把字串轉成數字,這裡用one-hot。把二分類問題看成多分類問題的特例,然後用softmax。最終模型在訓練集上可達到100%準確率,並且在西瓜

機器學習習題3.3答案

程式設計實現對率迴歸,並給出西瓜資料集[email protected]上的結果。 對率迴歸即邏輯迴歸,可以看做沒有隱藏層的,用sigmoid做啟用函式,crossentropy做cost(

機器學習課後習題一:緒論

1 表1.1中若只包含編號為1和4的兩個樣例,試給出相應的版本空間 編號 色澤 根蒂 敲聲 好瓜 1 青綠 蜷縮 濁響 是 4 烏黑 稍蜷 沉悶 否 根據表格可看出,每個屬性有

機器學習》——第6章 支援向量機

1、間隔與支援向量 (1)分類學習的最基本思想就是:基於訓練集D在樣本空間中找到一個劃分超平面,將不同類別的樣本分開。 (2)在樣本空間中,用線性方程來表示劃分超平面:ωTx + b = 0 ;其中ω = (ω1;ω2; … ; ωd)為法向量,決定超平面內的方向;b

機器學習 第八章課後答案歡迎探討

作為一個初學者,嘗試著去寫作業,並對答案做個整理附錄。 這裡是第八章。 整合學習8.1 假設拋硬幣正面朝上的概率為p , 反面朝上的概率為 1-p.  令H(n)代表拋n次硬幣所得正面朝上的次數,則最多k次正面朝上的概率為   (典型的二項分佈 對小於等於k 的 做累加和) 

機器學習》 西瓜資料集3.0

書上的一個常用資料集 編號,色澤,根蒂,敲聲,紋理,臍部,觸感,密度,含糖率,好瓜 1,青綠,蜷縮,濁響,清晰,凹陷,硬滑,0.697,0.46,是 2,烏黑,蜷縮,沉悶,清晰,凹陷,硬滑,0.774

機器學習參考答案 第一章 緒論

表1.1中若只包含編號為1和4的兩個樣例,試給出相應的版本空間。表1.1 西瓜資料集編號色澤根蒂敲聲好瓜1青綠蜷縮濁響是2烏黑蜷縮濁響是3青綠硬挺清脆否4烏黑稍蜷沉悶否假設空間指的是問題所有的假設組成的空間,我們可以把學習過程看做是在假設空間中搜索的過程,搜尋目標是尋找與訓練

機器學習 習題3.1-3.3個人筆記

3.1  試分析在什麼情況下式(3.2)中不必考慮偏置項b. 其實從前面第一章開始的習題就有很多不會的,第二章更是隻會做前兩道,現在到第三章,發現第一題都不是很明瞭了。從我個人來看:f(x)=w'x+b中,x代表d維向量,w則是相應的權重向量,而b=b*x0可看做權重為b,

機器學習西瓜書學習筆記1:第三章-線性模型

一、線性迴歸     線性迴歸的基本思想是採用對輸入樣例各個特徵進行線性加權的方式得到預測的輸出,並將預測的輸出和真實值的均方誤差最小化。1)如果輸入樣例只有一個特徵,那這個過程就是用一條直線去擬合平面直角座標系上的點; 2)如果有兩個特徵,表現在平面直角座標系上就是用一條

機器學習學習筆記歸納偏好

定義:機器學習演算法在學習過程中對某種型別假設的偏好。 每種演算法必有其歸納偏好,否則它將被假設空間中看似在訓練集上“等效”的假設所迷惑,無法產生確定的學習結果。 例子理解: 編號 色澤 根蒂 敲聲 好瓜 1 青綠 蜷縮 濁響 是

機器學習 課後習題3.3:程式設計實現對率迴歸,並給出西瓜資料集 3.0α 上的結果.

資料如下: python 程式碼如下: #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Tue Jan 30 10:05:01 2018 @author: llw """ #logistic r

機器學習》()課後習題參考答案

 目錄: 參考:http://blog.csdn.net/snoopy_yuan/article/details/62045353 - 目錄 第一章 緒論 第二章 模型評估與選擇 第三章 線性模型 第四章 決策樹 [2016.12.20]決策樹代碼太亂,

機器學習】第一張緒論 答案python

機器學習已經看了挺長時間,一直在打醬油式的看。這次準備認真看並且做一下習題,程式碼實現。 第一張緒論有5道題。 1.根據表的編號1和4 兩個樣例,求相應的版本版本空間 幾個簡單的解釋: 假設空間: 所有假設組成的空間 學習過程: 在所有假設空間中搜索想要的假設 目標: 搜尋到

機器學習 第一章緒論含答案

知識點 分類:離散值 迴歸:連續值 監督學習:分類、迴歸 無監督學習:聚類 泛化能力(generalization):學得模型適用於新樣本的能力。 版本空間:與訓練集一致的“假設集合”。 歸納→歸納偏好(inductive bias),結合具體問題

機器學習學習筆記第四章 決策樹課後習題python 實現

一、基本內容 1.基本流程 決策樹的生成過程是一個遞迴過程,有三種情形會導致遞迴返回 (1)當前節點包含的yangben全屬於同一類別,無需劃分; (2)當前屬性集為空,或是所有yangben在所有屬性上的取值相同,無法劃分; (3)當前結點包含的yangben集合為空,不能

機器學習學習筆記第三章 線性模型課後習題python 實現

線性模型 一、內容 1.基本形式 2.線性迴歸:均方誤差是迴歸任務中最常用的效能度量 3.對數機率迴歸:對數機率函式(logistic function)對率函式是任意階可導的凸函式,這是非常重要的性質。 4.線性判別分析(LDA 是一種降維的方法) 5.多分類學習: