參考:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 讀取資料
path = 'i:\\吳恩達機器學習\\test1\\資料集\\ex1data1.txt'
# names 新增列名,header 用指定的行為作為標題,若原無標題且指定標題則設為none
data = pd.read_csv(path, header=none, names=['population', 'profit'])
# head()函式,有乙個引數n,返回前n行資料,n預設等於5
data.head()
# describe()函式,可以檢視資料的基本情況,包括:count非空數值,mean平均值,std標準差,max,min,(25%,50%,75%)分位數
data.describe()
# scatter : 散點圖
data.plot(kind='scatter', x='population', y='profit', figsize=(8, 5))
plt.show()
# 計算代價函式
def computecost(x, y, theta):
inner = np.power(((x * theta.t) - y), 2) # power(x, y) 函式,計算 x 的 y 次方。
return np.sum(inner) / (2 * len(x))
# insert()函式,插入第0列,列名ones,資料為1
data.insert(0, 'ones', 1)
print(data.head())
# 變數初始化 set x (training data) and y (target variable)
cols = data.shape[1] # 列數,讀取data的形狀,3
x = data.iloc[:, 0:cols - 1] # 取前cols-1列,即輸入向量,人口數量0:2
y = data.iloc[:, cols - 1: cols] # 取最後一列,即目標向量,利潤2:3
# print(cols)
x.head() # 檢視前五行0:4
y.head()
x = np.matrix(x.values) # print(x.shape) (97, 2)
y = np.matrix(y.values)
theta = np.matrix([0, 0]) # print(theta) [[0 0]]
np.array([[0, 0]]).shape
# (1,2)
x.shape, theta.shape, y.shape
# ((97,2), (1,2), (97,1))
# 計算初始代價函式的值
computecost(x, y, theta)
x.shape, theta.shape, y.shape, x.shape[0]
def gradientdescent(x, y, theta, alpha, epoch): # 學習率 alpha = 0.01, 迴圈次數 epoch =1000
"""return theta, cost"""
temp = np.matrix(np.zeros(theta.shape)) # 初始化乙個θ的臨時矩陣(1,2)
parameters = int(theta.flatten().shape[1]) # 引數θ的數量 flatten()函式是變平,以行優先,shape是獲得它的列數
cost = np.zeros(epoch) # 初始化乙個ndarray,包含每次epoch的cost(代價)
m = x.shape[0] # 樣本數量m shape()函式返回 [行數,列數]
for i in range(epoch):
# 利用向量化一步求解
temp = theta - (alpha / m) * (x * theta.t - y).t * x
# 以下是不用vectorization求解梯度下降
# error = (x * theta.t) - y # (97, 1)
# for j in range(parameters):
# term = np.multiply(error, x[:,j]) # (97, 1)
# temp[0,j] = theta[0,j] - ((alpha / m) * np.sum(term)) # (1,1)
theta = temp # 優化theta
cost[i] = computecost(x, y, theta)
return theta, cost
# 初始化一些附加變數--學習速率α和要執行的迭代次數
alpha = 0.01
epoch = 1000
# 執行梯度下降演算法訓練合適的θ
final_theta, cost = gradientdescent(x, y, theta, alpha, epoch)
# 使用我們擬合的引數計算訓練模型的代價函式(誤差)
computecost(x, y, final_theta)
# 繪製線性模型以及資料,直觀地看出它的擬合
x = np.linspace(data.population.min(), data.population.max(), 100) # 橫座標
# np.linspace() 在指定的間隔內返回均勻間隔的數字
f = final_theta[0, 0] + (final_theta[0, 1] * x) # 縱座標, 利潤
fig, ax = plt.subplots(figsize=(6, 4))
ax.plot(x, f, 'r', label='prediction')
ax.scatter(data['population'], data.profit, label='traning data')
ax.legend(loc=2) # 2表示在左上角
ax.set_xlabel('population')
ax.set_ylabel('profit')
ax.set_title('predicted profit vs. population size')
plt.show()
fig, ax = plt.subplots(figsize=(8, 4))
ax.plot(np.arange(epoch), cost, 'r') # np.arange() 返回等差陣列
ax.set_xlabel('iterations')
ax.set_ylabel('cost')
ax.set_title('error vs. training epoch')
plt.show()
吳恩達機器學習作業 邏輯回歸模型
logistic regression 目的 建立乙個邏輯回歸模型用來 乙個是否能夠被大學錄取 問題描述 假如你是乙個administrator,現要根據學生的兩次成績來決定他們是否有資格被錄取。早先被錄取學生的資料作為training set。每乙個training sample 每個學生的兩個考...
吳恩達機器學習作業(2) 多元線性回歸
目錄 1 資料處理 2 代價函式 3 scikit learn訓練資料集 4 正規方程 練習1還包括乙個房屋 資料集,其中有2個變數 房子的大小,臥室的數量 和目標 房子的 我們使用我們已經應用的技術來分析資料集。還是那個建議,大家拿到資料先看看資料長什麼樣子。path ex1data2.txt d...
多分類邏輯回歸 吳恩達機器學習作業
思想 多分類拆成單分類問題,針對輸入訓練集擬合不同分類結果下的引數,選出假設函式最大的值即為最終分類。1.計算不同分類標準下的引數列表 function all theta onevsall x,y,num labels,lambda m size x,1 n size x,2 all theta ...