小编Ale*_*rov的帖子

了解sklearn QuantileTransformer

我尝试使用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)

python math machine-learning scikit-learn

7
推荐指数
1
解决办法
664
查看次数

投射到自定义域 PostgreSQL

我正在尝试创建自定义域类型来强制对多个表进行约束。
约束工作正常,但我还想添加自定义转换,该转换将在实际转换和检查之前应用小写。

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)

我将不胜感激任何想法,谢谢。

sql postgresql types casting

6
推荐指数
1
解决办法
984
查看次数

Keras LSTM TimeDistributed,有状态

是否有详细解释TimeDistributed,stateful和return_sequences如何工作?在这两种情况下我都要设置shuffle = False吗?它是否适用于窗户(1-11,2-12,3-13等)或是否应批量使用(1-11,12-22,13-33等)

我对LSTM图层特别感兴趣.

stateful lstm keras

2
推荐指数
1
解决办法
3491
查看次数

了解 Keras 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)

lstm keras

2
推荐指数
1
解决办法
2570
查看次数