修复了单热编码中的冗余,但在尝试反转时仍然出错
Fixed redundancy in one-hot encoding but still having error when trying to invert it
我正在进行单热编码并使用 ̂ =(()^−1) * 来估计 theta。由于冗余,我收到了一个错误,所以我决定删除有冗余的列。
这是在删除列之前:
这是我的代码,因为我试图删除有冗余的列:
def one_hot_encode_revised(data):
all_columns = data.columns
records = data[all_columns].to_dict(orient='records')
encoder = DictVectorizer(sparse=False)
encoded_X = encoder.fit_transform(records)
df = pd.DataFrame(data=encoded_X, columns=encoder.feature_names_)
return df.drop(['day=Fri', 'sex=Male', 'smoker=No', 'time=Dinner'], axis =1)
one_hot_X_revised = one_hot_encode_revised(X)
输出如下:
然后,我使用这个函数从上面的等式估计 theta:
def get_analytical_sol(X, y):
"""
Computes the analytical solution to our least squares problem
Parameters
-----------
X: a 2D dataframe of numeric features (one-hot encoded)
y: a 1D vector of tip amounts
Returns
-----------
The estimate for theta
"""
return np.linalg.inv(X.T * X) * (X.T * y)
到运行这个:
revised_analytical_thetas = get_analytical_sol(one_hot_X_revised, tips)
我的错误是:ValueError: Unable to coerce to DataFrame, shape must be (8, 244): given (252, 252)
供参考,tips是这样的:
我是否正确地删除了冗余,如果是,为什么我仍然有错误?
谢谢!
您在这一行中有错误 return np.linalg.inv(X.T * X) * (X.T * y)
。你想要做的是矩阵乘法。在 pandas 数据帧中,符号 *
不用于矩阵乘法。您需要使用数据框的 @
或 dot()
方法。
我正在进行单热编码并使用 ̂ =(()^−1) * 来估计 theta。由于冗余,我收到了一个错误,所以我决定删除有冗余的列。
这是在删除列之前:
def one_hot_encode_revised(data):
all_columns = data.columns
records = data[all_columns].to_dict(orient='records')
encoder = DictVectorizer(sparse=False)
encoded_X = encoder.fit_transform(records)
df = pd.DataFrame(data=encoded_X, columns=encoder.feature_names_)
return df.drop(['day=Fri', 'sex=Male', 'smoker=No', 'time=Dinner'], axis =1)
one_hot_X_revised = one_hot_encode_revised(X)
输出如下:
然后,我使用这个函数从上面的等式估计 theta:
def get_analytical_sol(X, y):
"""
Computes the analytical solution to our least squares problem
Parameters
-----------
X: a 2D dataframe of numeric features (one-hot encoded)
y: a 1D vector of tip amounts
Returns
-----------
The estimate for theta
"""
return np.linalg.inv(X.T * X) * (X.T * y)
到运行这个:
revised_analytical_thetas = get_analytical_sol(one_hot_X_revised, tips)
我的错误是:ValueError: Unable to coerce to DataFrame, shape must be (8, 244): given (252, 252)
供参考,tips是这样的:
我是否正确地删除了冗余,如果是,为什么我仍然有错误?
谢谢!
您在这一行中有错误 return np.linalg.inv(X.T * X) * (X.T * y)
。你想要做的是矩阵乘法。在 pandas 数据帧中,符号 *
不用于矩阵乘法。您需要使用数据框的 @
或 dot()
方法。