После того, как я пересчитал данные, данные стали слишком маленькими, и это заставило меня использовать их лучше
Но после этого мне нужен вывод, и вывод стал слишком маленьким, и если я попытаюсь сделать вывод, как это -
(output=output*real output.std()+ real output.mean())
будет большая разница между выводом, который я хочу, и выводом, полученным из кода. Поэтому мне нужен способ приблизить вывод к реальному
вывод
Вот несколько примеров немасштабированных данных:
реал из кода
399900 356029
329900 286322
369000 396967
и это после изменения масштаба:
реальный из кода
0,47574 0,12489
-0,08407 -0,43258
извините за мой плохой английский, но мне больше некому помочь
import numpy as np
import pandas as pd
def computeCost(X, y, theta):
inner = np.power(((X * theta.T) - y), 2)
return np.sum(inner) / (2 * len(X))
def gradientDescent(X, y, theta, alpha, iters):
temp = np.matrix(np.zeros(theta.shape))
parameters = int(theta.ravel().shape[1])
cost = np.zeros(iters)
for i in range(iters):
error = (X * theta.T) - y
for j in range(parameters):
term = np.multiply(error, X[:,j])
temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))
theta = temp
cost[i] = computeCost(X, y, theta)
return theta, cost
#=============================================================
#read data
path2 = 'D:\\New folder (4)\\03.txt'
data2 = pd.read_csv(path2, header=None, names=['Size', 'Bedrooms', 'Price'])
# rescaling data
m=data2['Price'].mean()
s=data2['Price'].std()
data2 = (data2 - data2.mean()) / data2.std()
# add ones column
data2.insert(0, 'Ones', 1)
# separate X (training data) from y (target variable)
cols = data2.shape[1]
X2 = data2.iloc[:,0:cols-1]
y2 = data2.iloc[:,cols-1:cols]
# convert to matrices and initialize theta
X2 = np.matrix(X2.values)
y2 = np.matrix(y2.values)
theta2 = np.matrix(np.array([0,0,0]))
# initialize variables for learning rate and iterations
alpha = 0.1
iters = 100
# perform linear regression on the data set
g2, cost2 = gradientDescent(X2, y2, theta2, alpha, iters)
y1=X2*g2.T
print(y1)
print(y1*s+m)