Я пытаюсь обернуть голову вокруг машинного обучения внутри python. Я работал со следующим примером (http://scikit-learn.org/stable/auto_examples/plot_multioutput_face_completion.html#example-plot-multioutput-face-completion-py) с примером кода ниже.python - linear regression - image
Я хотел бы проверить/подтвердить свое понимание внутренней работы линейной регрессии. Цель состоит в том, чтобы предсказать нижнюю недостающую половину изображения, посмотрев на известную верхнюю половину изображения. Изначально было 300 64 * 64 изображений (4096 пикселей). Независимая переменная X представляет собой матрицу 300 * 2048 (300 изображений, 2048 пикселей (верхняя половина этих изображений). Зависимая переменная также является матрицей 300 * 2048 (нижняя половина изображений). Кажется, что матрица коэффициентов является . 2048 * 2048 матрицы я прав в моем понимании, что:
, что прогноз для одного пикселя у (например, изображений 1, наиболее uppper левого пикселя) выполняются multiplicatoin всех 2048 пикселов в верхняя половина изображения в 1 раз превышает набор коэффициентов регрессии - и, таким образом, каждый недостающий пиксель в нижней половине оценивается с учетом всех 2048 пикселей этого конкретного изображения?
что регрессия co (каждый пиксель y имеет различный набор коэффициентов регрессии 2048), и что эти коэффициенты оцениваются путем нахождения соответствия OLS для этого конкретного местоположения пикселей по идентичному местоположению пикселей по 300 имеющимся изображениям?
Я вполне мог бы быть смущен матрицами - поэтому, пожалуйста, исправьте меня, если я ошибаюсь. большое спасибо. W
print(__doc__)
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_olivetti_faces
from sklearn.utils.validation import check_random_state
from sklearn.ensemble import ExtraTreesRegressor
from sklearn.neighbors import KNeighborsRegressor
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import RidgeCV
# Load the faces datasets
data = fetch_olivetti_faces()
targets = data.target
data = data.images.reshape((len(data.images), -1))
train = data[targets < 30]
test = data[targets >= 30] # Test on independent people
# Test on a subset of people
n_faces = 5
rng = check_random_state(4)
face_ids = rng.randint(test.shape[0], size=(n_faces,))
test = test[face_ids, :]
n_pixels = data.shape[1]
X_train = train[:, :np.ceil(0.5 * n_pixels)] # Upper half of the faces
y_train = train[:, np.floor(0.5 * n_pixels):] # Lower half of the faces
X_test = test[:, :np.ceil(0.5 * n_pixels)]
y_test = test[:, np.floor(0.5 * n_pixels):]
# Fit estimators
ESTIMATORS = {
"Extra trees": ExtraTreesRegressor(n_estimators=10, max_features=32,
random_state=0),
"K-nn": KNeighborsRegressor(),
"Linear regression": LinearRegression(),
"Ridge": RidgeCV(),
}
y_test_predict = dict()
for name, estimator in ESTIMATORS.items():
estimator.fit(X_train, y_train)
y_test_predict[name] = estimator.predict(X_test)
Линейная регрессия вряд ли будет работать для этой проблемы, вместо этого предложит нейронные сети. – par
@ user2662639 проблема - демонстрация sklearn. нейронные сети не являются панацеей - в этой проблеме есть всего 300 примеров обучения, поэтому их производительность не будет существенно отличаться (попробуйте установить неподготовленную «глубокую» сеть до 300 примеров и посмотреть, что произойдет. Ваша структура сети должна быть намного меньше, чтобы иметь возможность работать). Лучшим решением будет наложение гладкости в структуру вывода, например. с регуляризованной матричной факторизацией, среди других подходов – eqzx