Мне удалось создать код для этого примера, но я не совсем уверен, как согласовать углы, которые я получаю из моего кода, с графиком, на который я смотрю.
Код: Выделить всё
import matplotlib.pyplot as plt
import numpy as np
from sklearn.linear_model import LinearRegression
import math
Angle1 = 45
Angle2 = 120
# u, v computed from https://stats.stackexchange.com/questions/164586/can-the-coefficient-of-determination-r2-be-more-than-one-what-is-its-upper-b
Rad1, Rad2 = math.radians(Angle1), math.radians(Angle2)
Rsquared1, Rsquared2 = math.cos(Rad1)**2, math.cos(Rad2)**2
p1, p2 = np.sqrt(Rsquared1), np.sqrt(Rsquared2)
u = (np.array([2, -1, -1])/np.sqrt(6)).reshape(-1, 1)
v = (np.array([0, 1, -1])/np.sqrt(2)).reshape(-1, 1)
# define X and Y
X1, X2 = u, p1 * u + np.sqrt(1-p1**2)*v
X = np.hstack((X1, X2))
Y = (p1*p2 - np.sqrt(1-p1**2)*np.sqrt(1-p2**2))*u + (p1*np.sqrt(1-p1**2)*np.sqrt(1-p2**2))*v
# Fit joint regression
model = LinearRegression(fit_intercept=False)
model.fit(X, Y)
Yh = model.predict(X)
e = Y - Yh
# Fit univariate regressions
model1 = LinearRegression(fit_intercept=False)
model1.fit(X1, Y)
Y1 = model1.predict(X1)
model2 = LinearRegression(fit_intercept=False)
model2.fit(X2, Y)
Y2 = model2.predict(X2)
costheta = np.linalg.norm(Yh - np.mean(Y)) / np.linalg.norm(Y - np.mean(Y))
costheta1 = np.linalg.norm(Y1 - np.mean(Y)) / np.linalg.norm(Y - np.mean(Y))
costheta2 = np.linalg.norm(Y2 - np.mean(Y)) / np.linalg.norm(Y - np.mean(Y))
print(f"Angle1 = {Angle1}")
print(f"Angle2 = {Angle2}")
print(f"Rsquared1 = {Rsquared1}")
print(f"Rsquared2 = {Rsquared2}")
print(f"cos(theta)^2 = {costheta ** 2}")
print(f"cos(theta1)^2 = {costheta1 ** 2}")
print(f"cos(theta2)^2 = {costheta2 ** 2}")
print(f"theta: {math.degrees(math.acos(costheta))}")
print(f"theta1: {math.degrees(math.acos(costheta1))}")
print(f"theta2: {math.degrees(math.acos(costheta2))}")
Код: Выделить всё
Angle1 = 45
Angle2 = 120
Rsquared1 = 0.5000000000000001
Rsquared2 = 0.24999999999999983
cos(theta)^2 = 1.0
cos(theta1)^2 = 0.2632245247831985
cos(theta2)^2 = 0.05961678695043583
theta: 0.0
theta1: 59.13252220932562
theta2: 75.86747779067439
Я построил графики X1, X2, их размаха, Y1 и Y2, а также совместную регрессию Y. Прогноз «Шляпа Y», конечно, перекрывается с Y, и мы идеально подходим по замыслу. Можете ли вы помочь мне связать то, что я вижу, с ракурсами, выбранными в моем сценарии?
Подробнее здесь: https://stackoverflow.com/questions/798 ... -intuition
Мобильная версия