python实现线性回归预测不用sklearn库_python – 为什么我的自定义线性回归模型不匹配sklearn?...

我正在尝试用Python创建一个简单的线性模型,不使用库(numpy除外).这就是我所拥有的

import numpy as np

import pandas

np.random.seed(1)

alpha = 0.1

def h(x,w):

return np.dot(w.T,x)

def cost(X,W,Y):

totalCost = 0

for i in range(47):

diff = h(X[i],W) - Y[i]

squared = diff * diff

totalCost += squared

return totalCost / 2

housing_data = np.loadtxt('Housing.csv',delimiter=',')

x1 = housing_data[:,0]

x2 = housing_data[:,1]

y = housing_data[:,2]

avgX1 = np.mean(x1)

stdX1 = np.std(x1)

normX1 = (x1 - avgX1) / stdX1

print('avgX1',avgX1)

print('stdX1',stdX1)

avgX2 = np.mean(x2)

stdX2 = np.std(x2)

normX2 = (x2 - avgX2) / stdX2

print('avgX2',avgX2)

print('stdX2',stdX2)

normalizedX = np.ones((47,3))

normalizedX[:,1] = normX1

normalizedX[:,2] = normX2

np.savetxt('normalizedX.csv',normalizedX)

weights = np.ones((3,))

for boom in range(100):

currentCost = cost(normalizedX,weights,y)

if boom % 1 == 0:

print(boom,'iteration',weights[0],weights[1],weights[2])

print('Cost',currentCost)

for i in range(47):

errorDiff = h(normalizedX[i],weights) - y[i]

weights[0] = weights[0] - alpha * (errorDiff) * normalizedX[i][0]

weights[1] = weights[1] - alpha * (errorDiff) * normalizedX[i][1]

weights[2] = weights[2] - alpha * (errorDiff) * normalizedX[i][2]

print(weights)

predictedX = [1,(2100 - avgX1) / stdX1,(3 - avgX2) / stdX2]

firstPrediction = np.array(predictedX)

print('firstPrediction',firstPrediction)

firstPrediction = h(firstPrediction,weights)

print(firstPrediction)

首先,它很快收敛.仅经过14次迭代.其次,它给出了与sklearn的线性回归不同的结果.作为参考,我的sklearn代码是:

import numpy

import matplotlib.pyplot as plot

import pandas

import sklearn

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LinearRegression

dataset = pandas.read_csv('Housing.csv',header=None)

x = dataset.iloc[:,:-1].values

y = dataset.iloc[:,2].values

linearRegressor = LinearRegression()

xnorm = sklearn.preprocessing.scale(x)

scaleCoef = sklearn.preprocessing.StandardScaler().fit(x)

mean = scaleCoef.mean_

std = numpy.sqrt(scaleCoef.var_)

print('stf')

print(std)

stuff = linearRegressor.fit(xnorm,y)

predictedX = [[(2100 - mean[0]) / std[0],(3 - mean[1]) / std[1]]]

yPrediction = linearRegressor.predict(predictedX)

print('predictedX',predictedX)

print('predict',yPrediction)

print(stuff.coef_,stuff.intercept_)

我的自定义模型预测为y值为337,000,sklearn预测为355,000.我的数据是47行,看起来像

2104,3,3.999e+05

1600,3.299e+05

2400,3.69e+05

1416,2,2.32e+05

3000,4,5.399e+05

1985,2.999e+05

1534,3.149e+05

我假设(a)我的梯度下降回归在某种程度上是错误的或(b)我没有正确地使用sklearn.

为什么2不会为给定输入预测相同输出的任何其他原因?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是关于Python中使用sklearn实现多元线性回归模型的建立、评估和调优的详细介绍。 1. 多元线性回归模型简介 多元线性回归模型是一种用于建立因变量和多个自变量之间关系的统计模型。它假设因变量与自变量之间存在线性关系,并且能够通过最小二乘法等方法进行求解。 多元线性回归模型的一般形式为: y = β0 + β1x1 + β2x2 + … + βpxp + ε 其中,y 表示因变量,x1, x2, …, xp 表示自变量,β0, β1, β2, …, βp 表示回归系数,ε 表示误差项。多元线性回归的目标是求出最优的回归系数,使得模型的预测误差最小。 2. sklearn实现多元线性回归模型的建立 sklearn提供了LinearRegression类来实现多元线性回归模型的建立。下面是一个简单的示例代码: ```python from sklearn.linear_model import LinearRegression # 创建线性回归模型对象 model = LinearRegression() # 使用数据拟合模型 model.fit(X, y) # 打印回归系数 print(model.coef_) ``` 其中,X表示自变量的数据集,y表示因变量的数据集。model.fit(X, y)用于拟合模型,model.coef_用于获取回归系数。 3. 多元线性回归模型的评估 在建立多元线性回归模型后,需要对模型进行评估以确定其预测能力的好坏。常用的评估指标包括均方误差(MSE)、平均绝对误差(MAE)和决定系数(R2)等。 下面是一个使用sklearn计算MSE和R2的示例代码: ```python from sklearn.metrics import mean_squared_error, r2_score # 使用模型进行预测 y_pred = model.predict(X) # 计算MSE和R2 mse = mean_squared_error(y, y_pred) r2 = r2_score(y, y_pred) # 打印评估结果 print("MSE:", mse) print("R2:", r2) ``` 4. 多元线性回归模型的调优 为了提高模型的预测能力,需要对模型进行调优。常用的调优方法包括特征选择和正则化等。 特征选择是指选择对因变量具有最强预测能力的自变量。sklearn提供了SelectKBest、RFE和SelectFromModel等特征选择方法。下面是一个使用SelectKBest方法进行特征选择的示例代码: ```python from sklearn.feature_selection import SelectKBest, f_regression # 使用SelectKBest方法选择前两个最具预测能力的特征 selector = SelectKBest(f_regression, k=2) X_new = selector.fit_transform(X, y) # 使用新的特征集拟合模型 model.fit(X_new, y) ``` 正则化是指通过加入惩罚项来抑制模型过拟合的方法。sklearn提供了Ridge、Lasso和ElasticNet等正则化方法。下面是一个使用Ridge方法进行正则化的示例代码: ```python from sklearn.linear_model import Ridge # 创建Ridge模型对象 model = Ridge(alpha=0.1) # 使用数据拟合模型 model.fit(X, y) ``` 其中,alpha是正则化强度的超参数,取值范围为[0, ∞]。alpha越大,惩罚力度越大,模型越不容易过拟合。 好的,以上就是关于Python中使用sklearn实现多元线性回归模型的建立、评估和调优的介绍。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值