亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

需要改進蟒蛇中的正態方程

需要改進蟒蛇中的正態方程

一只斗牛犬 2022-09-27 15:09:08
我是Python的新手,想為正常方程編寫代碼。代碼如下,請提供一些關于編碼的建議和反饋。謝謝!def norm_equ(x, y):     x_input = pd.DataFrame(x)     x_input = (x_input - x_input.mean())/x_input.std()     x_0 = np.ones((len(x_input), 1))     x_new = np.hstack((x_0, x_input))     temp1 = np.linalg.pinv(np.dot(np.transpose(x_new), x_new))     temp2 = np.dot(temp1, np.transpose(x_new))     theta = np.dot(temp2, y)    return theta我的問題是關于:如何在數據中添加$ X_0 $?除了 data.frame 數據結構之外,還有其他工作方式嗎?提前感謝您的幫助。
查看完整描述

2 回答

?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

我舉了一些如何使用numpy的例子,希望它能回答你的問題。通常,對于數值運算,對于numpy,對于更通用的運算(字符串,聚合等),則用于熊貓。一般來說,pandas很適合準備數據并將其傳遞到更低級別的數據結構,例如numpy到更重的計算


你問1)使用哪種數據結構?去多維數組在麻木


2)如何獲取列數?對于一個 np.數組,你只需要使用 .shape,它是 (dim1, dim2 .... ) 的元組通常 (n_rows, cols)


3)是一個1維的np.數組,這就是為什么你有這樣的形狀(n_rows,),所以如果你打印y,你會看到一個矢量...所以你只有一列。np.數組在開始時可能會令人困惑,因為允許您創建比向量或矩陣(如張量)更通用的東西,這將是形狀(x,y,z)的np.數組。因此,談論形狀的np.數組的列是有道理的(n_rows,n_cols)


4) 如果列 std() 為 0,則所有實例都是相同的,因此基本上沒有意義將此規范化應用于 1 列。(只需跳過它)


更詳細地說,通常標準化列的目標是使列中的值落在值范圍內。即介于 0 和 1 之間。例如,這是在機器學習中完成的,以避免具有較大值的訓練數據的列(特征)對模型的影響大于具有較小值的模型。您可以注意到,您正在應用的規范化不會強制列位于 [0, 1] 中。因此,強制進行歸一化,并且不會像其他規范化(除非max和min = 0)那樣給出除法誤差將是:


x_raw = (x_raw - x_raw.min())/(x_raw.max() - x_raw.min())

print(x_raw)

import numpy as np

def norm_equ(x, y):

    temp1 = np.linalg.pinv(np.dot(np.transpose(x), x))

    temp2 = np.dot(temp1, np.transpose(x))

    theta = np.dot(temp2, y)

    return theta


# create a matrix 50x10 random matrix

x_raw = np.random.random([50,10])

y = np.random.random([50])

print(x_raw.shape) #-----> (50, 10)

print(y.shape) #-----> (50, ) a vec "50 x 1"


# transform raw input

x_norm = (x_raw - x_raw.mean())/x_raw.std()

x_0 = np.ones((x_norm.shape[0],1))

x_input = np.hstack((x_0, x_norm))

print(x_input.shape) #-----> (51, 11)

theta = norm_equ(x_input, y)

print(theta.shape) #-----> (11, ) 


# load from csv file

arrays_from_file = np.loadtxt(fname="dummy.csv",

                              delimiter=",",

                              skiprows=1)

y = np.random.random([arrays_from_file.shape[0]])

print(arrays_from_file.shape) #-----> (2, 6)

print(y.shape) #-----> (2, )

another_theta = norm_equ(arrays_from_file, y)

print(another_theta.shape) #-----> (6, )


查看完整回答
反對 回復 2022-09-27
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

為什么要將 x 轉換為數據幀?似乎它應該只是一個numpy數組,給定其余的代碼。


如果你想要一個有三列的數據幀,那么它將是


df = pd.DataFrame({'x_input': x, 'x_0': 1})

df['x_input_norm'] = df['x_input'] - df['x_input'].mean() / df['x_input'].std()


查看完整回答
反對 回復 2022-09-27
  • 2 回答
  • 0 關注
  • 88 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號