吳恩達機器學習作業Python實現 一 線性回歸

2021-10-10 17:58:57 字數 3496 閱讀 2081

參考:

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 ...