Добавил:
chrysler_a57_mltbnk
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#стоимость от 1.7*10^11 до примерно 3*10^10
#теты имеют степень 1*10^7
import numpy as np
import scipy.optimize as spop
import pandas as pd
import matplotlib.pyplot as plt
def prediction(Theta, X):
return X @ Theta
def j(theta):
h = prediction(theta, X1)
return 1 / (2 * n) * np.sum((h - price_to_float) ** 2)
def dJ(theta):
h = prediction(theta, X1)
return 1 / n * np.dot((h - price_to_float).T, X1).T
def callback(theta):
func_stoim = j(theta)
J.append(func_stoim)
theta = theta - alpha * dJ(theta)
theti.append(theta)
# print(f'Функция стоимости на текущей итерации = {func_stoim}'
data_1 = pd.read_csv('/content/price_of_home.csv', header=None, encoding='latin-1', names=['id', 'date', 'price', 'bedrooms', 'bathrooms', 'sqft_living', 'sqft_lot', 'floors', 'waterfront', 'view', 'condition', 'grade', 'sqft_above', 'sqft_basement', 'yr_built', 'yr_renovated', 'zipcode', 'lat', 'long', 'sqft_living15', 'sqft_lot15'], delimiter=',')
data = pd.DataFrame(data_1)
data.drop(index=0, axis=0, inplace=True)
data.drop(data.columns[[0, 1, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]], axis=1, inplace=True)
data.head()
price_to_float = []
for price in data['price']:
price_to_float.append(float(price))
sqft_living_to_float = []
for sqft_living in data['sqft_living']:
sqft_living_to_float.append(float(sqft_living))
sqft_living_to_float = np.array(sqft_living_to_float)
n = len(data['price'])
J = []
theti = []
alpha = 0.001
X = np.ones((data['sqft_living'].size, 5))
X[:, 1], X[:, 2], X[:, 3], X[:, 4] = sqft_living_to_float, sqft_living_to_float, sqft_living_to_float, sqft_living_to_float
theta = np.array([0, 0, 0, 0, 0]).T
maxi = np.ones((5, 1))
mins = np.zeros((5, 1))
X1 = np.ones((data['sqft_living'].size, 5))
for i in range(1, 5):
maxi[i] = np.max(X.T[i])
mins[i] = np.min(X.T[i])
print(maxi, '\n', mins)
for p in range(len(data['sqft_living'])):
for o in range(1, 5):
X1[p][o] = (X[p][o] - mins[o]) / (maxi[o] - mins[o])
X1[:, 1], X1[:, 2], X1[:, 3], X1[:, 4] = X1[:, 1], X1[:, 2]**2, X1[:, 3]**3, X1[:, 4]**4
x = [10, 10, 10, 10, 10]
resultat = spop.minimize(j, x, method='BFGS', jac=dJ, callback=callback)
# x: [ 2.307e+05 1.514e+06 -8.392e+05 2.706e+07 -2.370e+07]
# x: [ 2.307e+05 1.514e+06 7.986e+05 2.346e+07 -2.173e+07]
Xobik = np.ones((21613, 5))
for X_i in range(len(X1)):
for X_j in range(5):
Xobik[X_i][X_j] = X1[X_i][X_j] * (maxi[X_j] - mins[X_j]) + mins[X_j]
print('\nЧто-то типа обычного масштаба\n', Xobik[-1])
# print('\nА это те самые, которые получились после работы функции минимизации\n', X1[-1])
x = np.linspace(0, 14000, 14000)
x_min = min(x)
x_max = max(x)
x1 = np.array([(xi-x_min) / (x_max - x_min) for xi in Xobik])
y = theti[-1][0] + theti[-1][1]*x1 + theti[-1][2]*x1**2 + theti[-1][3]*x1**3 + theti[-1][4]*x1**4
plt.scatter(sqft_living_to_float, price_to_float, c='red')
plt.plot(Xobik, y)
# plt.xlim([min(sqft_living_to_float) - 1, max(sqft_living_to_float) + 1])
# plt.ylim([min(price_to_float) - 1, max(price_to_float) + 1])
plt.grid(which='major')
plt.minorticks_on()
plt.grid(which='minor', linestyle=':')
plt.tight_layout()
plt.title('Зависимость цены дома от жилой площади')
plt.xlabel('Жилая площадь в доме')
plt.ylabel('Цена дома')
plt.show()
plt.plot(J)
plt.title('Зависимость функции стоимости от итерации')
plt.xlabel('Итерации')
plt.ylabel('Значение стоимости')
plt.show()
plt.plot(theti)
plt.title('Зависимость значений тет от итерации')
plt.xlabel('Итерации')
plt.ylabel('Значение тет')
plt.legend(['theta 0', 'theta1', 'theta2', 'theta3', 'theta4'], loc=1)
plt.show()
#теты имеют степень 1*10^7
import numpy as np
import scipy.optimize as spop
import pandas as pd
import matplotlib.pyplot as plt
def prediction(Theta, X):
return X @ Theta
def j(theta):
h = prediction(theta, X1)
return 1 / (2 * n) * np.sum((h - price_to_float) ** 2)
def dJ(theta):
h = prediction(theta, X1)
return 1 / n * np.dot((h - price_to_float).T, X1).T
def callback(theta):
func_stoim = j(theta)
J.append(func_stoim)
theta = theta - alpha * dJ(theta)
theti.append(theta)
# print(f'Функция стоимости на текущей итерации = {func_stoim}'
data_1 = pd.read_csv('/content/price_of_home.csv', header=None, encoding='latin-1', names=['id', 'date', 'price', 'bedrooms', 'bathrooms', 'sqft_living', 'sqft_lot', 'floors', 'waterfront', 'view', 'condition', 'grade', 'sqft_above', 'sqft_basement', 'yr_built', 'yr_renovated', 'zipcode', 'lat', 'long', 'sqft_living15', 'sqft_lot15'], delimiter=',')
data = pd.DataFrame(data_1)
data.drop(index=0, axis=0, inplace=True)
data.drop(data.columns[[0, 1, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]], axis=1, inplace=True)
data.head()
price_to_float = []
for price in data['price']:
price_to_float.append(float(price))
sqft_living_to_float = []
for sqft_living in data['sqft_living']:
sqft_living_to_float.append(float(sqft_living))
sqft_living_to_float = np.array(sqft_living_to_float)
n = len(data['price'])
J = []
theti = []
alpha = 0.001
X = np.ones((data['sqft_living'].size, 5))
X[:, 1], X[:, 2], X[:, 3], X[:, 4] = sqft_living_to_float, sqft_living_to_float, sqft_living_to_float, sqft_living_to_float
theta = np.array([0, 0, 0, 0, 0]).T
maxi = np.ones((5, 1))
mins = np.zeros((5, 1))
X1 = np.ones((data['sqft_living'].size, 5))
for i in range(1, 5):
maxi[i] = np.max(X.T[i])
mins[i] = np.min(X.T[i])
print(maxi, '\n', mins)
for p in range(len(data['sqft_living'])):
for o in range(1, 5):
X1[p][o] = (X[p][o] - mins[o]) / (maxi[o] - mins[o])
X1[:, 1], X1[:, 2], X1[:, 3], X1[:, 4] = X1[:, 1], X1[:, 2]**2, X1[:, 3]**3, X1[:, 4]**4
x = [10, 10, 10, 10, 10]
resultat = spop.minimize(j, x, method='BFGS', jac=dJ, callback=callback)
# x: [ 2.307e+05 1.514e+06 -8.392e+05 2.706e+07 -2.370e+07]
# x: [ 2.307e+05 1.514e+06 7.986e+05 2.346e+07 -2.173e+07]
Xobik = np.ones((21613, 5))
for X_i in range(len(X1)):
for X_j in range(5):
Xobik[X_i][X_j] = X1[X_i][X_j] * (maxi[X_j] - mins[X_j]) + mins[X_j]
print('\nЧто-то типа обычного масштаба\n', Xobik[-1])
# print('\nА это те самые, которые получились после работы функции минимизации\n', X1[-1])
x = np.linspace(0, 14000, 14000)
x_min = min(x)
x_max = max(x)
x1 = np.array([(xi-x_min) / (x_max - x_min) for xi in Xobik])
y = theti[-1][0] + theti[-1][1]*x1 + theti[-1][2]*x1**2 + theti[-1][3]*x1**3 + theti[-1][4]*x1**4
plt.scatter(sqft_living_to_float, price_to_float, c='red')
plt.plot(Xobik, y)
# plt.xlim([min(sqft_living_to_float) - 1, max(sqft_living_to_float) + 1])
# plt.ylim([min(price_to_float) - 1, max(price_to_float) + 1])
plt.grid(which='major')
plt.minorticks_on()
plt.grid(which='minor', linestyle=':')
plt.tight_layout()
plt.title('Зависимость цены дома от жилой площади')
plt.xlabel('Жилая площадь в доме')
plt.ylabel('Цена дома')
plt.show()
plt.plot(J)
plt.title('Зависимость функции стоимости от итерации')
plt.xlabel('Итерации')
plt.ylabel('Значение стоимости')
plt.show()
plt.plot(theti)
plt.title('Зависимость значений тет от итерации')
plt.xlabel('Итерации')
plt.ylabel('Значение тет')
plt.legend(['theta 0', 'theta1', 'theta2', 'theta3', 'theta4'], loc=1)
plt.show()
Соседние файлы в папке лабы
