python - 梯度下降的多元线性回归
问题描述
光环,
我是机器学习和 Python 方面的新手,我想用我的梯度下降预测King County 数据集中的 Kaggle House Sales。
我将 70%(15k 行)的训练和 30%(6k 行)的测试分开,我从 19 个特征中选择了 5 个特征,但是存在性能问题,算法花费了很多时间(超过 11 小时),100% 的内存并未能执行。
这是我的梯度下降课程:
class GradientDescent:
X_train = []
Y_train = []
X_test = []
Y_test = []
lr = 0
max_iter = 0
theta = 0
def __init__(self, X_train,Y_train,X_test,Y_test, lr=0.01, max_iter=100):
self.X_train = X_train
self.Y_train = Y_train
self.X_test = X_test
self.Y_test = Y_test
self.lr = lr
self.max_iter = max_iter
self.theta = np.random.randn(X_train.shape[1], 1)
print(self.theta)
def costFunction(self,theta,X,y):
"1/2m * E(h0-y)**2"
m = len(y)
y_pred = X.dot(theta)
cost = (1/2*m) * np.sum(np.square(y_pred-y))
return cost
def estimate(self):
m = len(self.Y_train)
mse_hist = np.zeros(self.max_iter)
#theta_hist = np.zeros(max_iter)
i = 0
while i < self.max_iter or mse_hist[i] > 0.01:
y_pred = np.dot(self.X_train,self.theta)
error = y_pred-self.Y_train
self.theta = self.theta - (1/m)*self.lr*(self.X_train.T.dot((error)))
mse_hist[i] = self.costFunction(self.theta,self.X_train, self.Y_train)
#print(mse_hist[i])
i+=1
return (self.theta, mse_hist)
def test(self):
res = pd.DataFrame()
for i,row in self.X_test.iterrows():
price_pred = np.dot(row.values,self.theta)
res = row
res['price_actual'] = self.Y_test[i]
res['price_predict'] = price_pred
res['r2_score'] = r2_score(res['price_actual'].values, res['price_predict'])
res.to_csv('output.csv')
有什么建议可以让它变得更好吗?
解决方案
一般来说,虽然我没有测试过,但代码看起来还不错。我能找到的唯一错误是您可能没有i
在 while 循环中递增,因此循环永远不会退出。
推荐阅读
- entity-framework - 链接来自不同数据库的模型
- git - 如何将先前推送的提交压缩到拉取请求?
- javascript - 无法浏览文件 - “错误:解析文件”(HTML5 checkValidity() ?)
- css - 具有垂直可滚动卡片文本的固定高度 Bootstrap 卡片
- react-native - react-navigation:与之前的路线具有相同的状态,但充当推送?
- git - 在 Sublime Text 中按单词而不是行进行区分
- javascript - Jquery Page out 转换
- android - 有没有办法让应用程序在谷歌商店或苹果商店中分类?
- java - 如何在Java中对链表进行就地排序以按升序添加包含整数的对象?
- swift - Swift WKWebView 长按不会立即显示 UIMenuItem