我尝试使用QuantileTransformer转换几列,但结果似乎并不方便。此外,即使对于较小的数据集,它也取决于列顺序。
我知道可以为每个功能创建一个单独的转换器,但是当我阅读文档时,该功能应该接受(n_samples,n_features)个对象。
这是Google colab重现结果的方法。
有没有一种方法可以应用QuantileTransformer并获得一致的结果(以便将相同的原始值映射到相同的转换值而不是一对多)?
import pandas as pd
from sklearn.preprocessing import QuantileTransformer
def unique_values(x):
return x.unique().tolist()
df = pd.read_csv('https://storage.googleapis.com/ml_universities/california_housing_train.csv', usecols=[0, 1])
columns = ['latitude', 'longitude']
qt = QuantileTransformer()
q_features = qt.fit_transform(df)
suffix = '__qt'
qdf = df.join(pd.DataFrame(q_features, columns=columns), rsuffix=suffix)
for col in columns:
q_col = f'{col}{suffix}'
print({col: qdf[col].nunique(), q_col: qdf[q_col].nunique()})
gdf = qdf.groupby(col)[q_col].agg([pd.Series.nunique, unique_values])
print(gdf.sort_values('nunique', ascending=False).head())
Run Code Online (Sandbox Code Playgroud)
结果:
{'latitude': 840, 'latitude__qt': 827}
nunique unique_values
latitude
34.07 102.0 [0.9865865865865866, 0.9719719719719734, 0.963...
34.08 101.0 [0.980980980980981, 0.9474474474474475, 0.9214...
34.06 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建自定义域类型来强制对多个表进行约束。
约束工作正常,但我还想添加自定义转换,该转换将在实际转换和检查之前应用小写。
CREATE DOMAIN email AS varchar(80)
CHECK (value ~ ('^[a-z0-9!#$%&''*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&''*+/=?^_`{|}~-]+)*@' ||
'(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$'));
CREATE OR REPLACE FUNCTION text_as_email(text)
RETURNS email
LANGUAGE SQL AS
$$ SELECT lower($1) :: email $$;
CREATE CAST ( text AS email )
WITH FUNCTION text_as_email(text) AS IMPLICIT;
Run Code Online (Sandbox Code Playgroud)
域和函数都按预期工作
SELECT 'abc@abc.com' :: email; -- no errors
SELECT 'abc@@abc.com' :: email; -- expected error
SELECT text_as_email('ABC@abc.com'); -- no errors, returns 'abc@abc.com'
Run Code Online (Sandbox Code Playgroud)
但强制转换无法转换大写
SELECT 'ABC@abc.com' :: email; -- gives an error
Run Code Online (Sandbox Code Playgroud)
我将不胜感激任何想法,谢谢。
是否有详细解释TimeDistributed,stateful和return_sequences如何工作?在这两种情况下我都要设置shuffle = False吗?它是否适用于窗户(1-11,2-12,3-13等)或是否应批量使用(1-11,12-22,13-33等)
我对LSTM图层特别感兴趣.
我可以理解如何乘以密集层权重以获得预测输出,但如何解释 LSTM 模型中的矩阵?
这里有一些玩具示例(不介意拟合,这只是矩阵乘法)
密集示例:
from keras.models import Model
from keras.layers import Input, Dense, LSTM
import numpy as np
np.random.seed(42)
X = np.array([[1, 2], [3, 4]])
I = Input(X.shape[1:])
D = Dense(2)(I)
linear_model = Model(inputs=[I], outputs=[D])
print('linear_model.predict:\n', linear_model.predict(X))
weight, bias = linear_model.layers[1].get_weights()
print('bias + X @ weights:\n', bias + X @ weight)
Run Code Online (Sandbox Code Playgroud)
输出:
linear_model.predict:
[[ 3.10299015 0.46077788]
[ 7.12412453 1.17058146]]
bias + X @ weights:
[[ 3.10299003 0.46077788]
[ 7.12412441 1.17058146]]
Run Code Online (Sandbox Code Playgroud)
LSTM 示例:
X = X.reshape(*X.shape, 1)
I = Input(X.shape[1:]) …
Run Code Online (Sandbox Code Playgroud) keras ×2
lstm ×2
casting ×1
math ×1
postgresql ×1
python ×1
scikit-learn ×1
sql ×1
stateful ×1
types ×1