1 資料集:
在我的部落格裡有.txt格式的
你也可以自己構造,**如下:
density=np.array([0.697,0.774,0.634,0.608,0.556,0.430,0.481,0.437,0.666,0.243,0.245,0.343,0.639,0.657,0.360,0.593,0.719]).reshape(-1,1)
sugar_rate=np.array([0.460,0.376,0.264,0.318,0.215,0.237,0.149,0.211,0.091,0.267,0.057,0.099,0.161,0.198,0.370,0.042,0.103]).reshape(-1,1)
xtrain=np.hstack((density,sugar_rate))
xtrain=np.hstack((np.ones([density.shape[0],1]),xtrain))
ytrain=np.array([1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0]).reshape(-1,1)
2 演算法實現**如下:
import matplotlib.pyplot as plt
import numpy as np
from sklearn.metrics import classification_report
from sklearn import preprocessing
from sklearn.preprocessing import polynomialfeatures
# 資料是否需要標準化
scale = false
# 載入資料
data = np.genfromtxt(r"f:\cda資料分析\data\西瓜書\14917341.txt", delimiter="\t")
# 資料處理,新增偏置項
x_data = data[:,:3]
y_data = data[:,-1,np.newaxis]
#print(x_data)
print(np.mat(x_data).shape)
print(np.mat(y_data).shape)
# 給樣本新增偏置項
x_data = np.concatenate((np.ones((17,1)),x_data),axis=1)
print(x_data.shape)
def sigmoid(x):#回歸公式
return 1.0/(1+np.exp(-x))
def cost(xmat, ymat, ws):#代價函式
left = np.multiply(ymat, np.log(sigmoid(xmat*ws)))#普通相乘(對應元素相乘;點乘用.dot())
right = np.multiply(1 - ymat, np.log(1 - sigmoid(xmat*ws)))
return np.sum(left + right) / -(len(xmat))
# 訓練模型,得到權值和cost值的變化
ws,costlist = gradascent(x_data, y_data)
print(ws)
# 畫圖 loss值的變化
x = np.linspace(0,10000,201)
plt.plot(x, costlist, c='r')
# plt.title('train')
# plt.xlabel('epochs')
# plt.ylabel('cost')
plt.show()
# **
def predict(x_data, ws):
if scale == true:#預處理否
x_data = preprocessing.scale(x_data)
xmat = np.mat(x_data)
ws = np.mat(ws)
return [1 if x >= 0.5 else 0 for x in sigmoid(xmat*ws)]#巢狀表示式
predictions = predict(x_data, ws)
print(classification_report(y_data, predictions))
回歸 梯度下降法
給定 m條訓練資料,假定方法 先說明向量問題,乙個向量就代表一條特徵值 梯度下降公式 重複公式直到 收斂。公式中意思是 1 第i個 2 重複計算1。直到 repeat util convergence python def gradient x,y,bu,number m,n x.shape wei...
西瓜書3 3對率回歸
這是西瓜書第一道實踐題,感覺書裡對於原理講解過於生硬,有點難以理解,所以我更多採用從andrew ng的深度學習中學到的logistic regression來描述 資料如下 編號密度 糖分好瓜 00.697 0.46011 0.774 0.37612 0.634 0.26413 0.608 0.3...
梯度下降法 3 實現線性回歸中的梯度下降法
構造資料集 import numpy import matplotlib.pyplot as plt 設定隨機數種子 numpy.random.seed 666 x 2 numpy.random.random size 100 y x 3.4.numpy.random.normal size 100...