【问题标题】:Slicing an H20 Frame切片 H20 框架
【发布时间】:2021-01-17 19:12:43
【问题描述】:

有没有办法根据布尔限制对 H20 帧进行切片?我制作了一个函数来收集一组 Trues 和 False'。我的目标是根据这个布尔数组分割一个 H2O 帧。

出于复制目的:

#Creation of Dataset    
X,y = make_classification(n_samples=5000, n_features=15,n_informative=15, n_redundant=0, n_repeated=0, n_classes=4
                              ,n_clusters_per_class=2,class_sep=3,flip_y=0.1,weights=[0.4,0.20,0.10,0.05], shuffle=True,random_state=1234)
    
    dataset_x = pd.DataFrame({'var1': X[:, 0], 'var2': X[:, 1],'var3': X[:, 2]})
    
    dataset_x['var2'] = dataset_x['var3'].round(0)
    
    dataset_x['var3'] = dataset_x['var3']*(-1)
    
    dataset_x['var4'] =np.where(dataset_x['var1']<=0, 0, 1)
    
    conditions = [(dataset_x['var2'] <= 0) & (dataset_x['var4'] == 0)
                  ,(dataset_x['var2'] <=0) & (dataset_x['var4'] == 1)
                  ,(dataset_x['var2'] >=0) & (dataset_x['var4'] == 0)
                  ,(dataset_x['var2'] >=0) & (dataset_x['var4'] == 1)]
    
    choices = [0, 1, 2, 3]
    
    dataset_x['var5'] = np.select(conditions, choices, default=0)
    
    dataset_x['var6'] = dataset_x['var3'].abs().round(0)
    
    mean_var1 = dataset_x['var3'].mean()
    len_var1 = len(dataset_x['var3'])
    
    dataset_x['var7'] =(mean_var1*(2.718)**((mean_var1)*(dataset_x['var1'].round(0))*-1))
    
    dataset_x['var8'] =dataset_x['var1'].round(0)
    
    dataset_x['var8'] =abs(dataset_x['var1'].round(0))*2
    
    dataset_y = pd.DataFrame({'target': y})
    
    simulated_irregular_dataset = pd.concat([dataset_x,dataset_y], axis=1)

定义布尔切片器:

def boolean_slicer(size,num_feat):
    array_slicer = []
    for i in range(size):
        slicer = np.ones(num_feat,dtype=np.bool)
        slicer[:int(0.5*num_feat)]=False
        np.random.shuffle(slicer)
        array_slicer.append(slicer)
    return array_slicer

将布尔限制应用于 H2O 框架:

h2o.init(min_mem_size_GB=8)    
#Transform data into a H2O Frame
H20_df = h2o.H2OFrame(X_train)
print(H20_df)

for i in list_of_Boolean:
    print (i)
    print(H20_df[:,i.tolist()])

收到错误:

H2OResponseError: Server error water.rapids.Rapids.IllegalASTException:
  Error: java.lang.NumberFormatException: For input string: "False"
  Request: POST /99/Rapids
    data: {'ast': '(tmp= py_16_sid_9474 (cols_py Key_Frame__upload_8abf91f6bc0ddcd442f8fa9b6f8b4822.hex [False True True True True True False True]))', 'session_id': '_sid_9474'}

【问题讨论】:

    标签: python-3.x numpy dataframe numpy-ndarray h2o


    【解决方案1】:

    我只需要将布尔值转换为整数。

    X,y = make_classification(n_samples=5000, n_features=15,n_informative=15, n_redundant=0, n_repeated=0, n_classes=4
                              ,n_clusters_per_class=2,class_sep=3,flip_y=0.1,weights=[0.4,0.20,0.10,0.05], shuffle=True,random_state=1234)
    
    dataset_x = pd.DataFrame({'var1': X[:, 0], 'var2': X[:, 1],'var3': X[:, 2]})
    
    dataset_x['var2'] = dataset_x['var3'].round(0)
    
    dataset_x['var3'] = dataset_x['var3']*(-1)
    
    dataset_x['var4'] =np.where(dataset_x['var1']<=0, 0, 1)
    
    conditions = [(dataset_x['var2'] <= 0) & (dataset_x['var4'] == 0)
                  ,(dataset_x['var2'] <=0) & (dataset_x['var4'] == 1)
                  ,(dataset_x['var2'] >=0) & (dataset_x['var4'] == 0)
                  ,(dataset_x['var2'] >=0) & (dataset_x['var4'] == 1)]
    
    choices = [0, 1, 2, 3]
    
    dataset_x['var5'] = np.select(conditions, choices, default=0)
    
    dataset_x['var6'] = dataset_x['var3'].abs().round(0)
    
    mean_var1 = dataset_x['var3'].mean()
    len_var1 = len(dataset_x['var3'])
    
    dataset_x['var7'] =(mean_var1*(2.718)**((mean_var1)*(dataset_x['var1'].round(0))*-1))
    
    dataset_x['var8'] =dataset_x['var1'].round(0)
    
    dataset_x['var8'] =abs(dataset_x['var1'].round(0))*2
    
    dataset_y = pd.DataFrame({'target': y})
    
    simulated_irregular_dataset = pd.concat([dataset_x,dataset_y], axis=1)
    
    def boolean_slicer(size,num_feat):
        array_slicer = []
        for i in range(size):
            slicer = np.ones(num_feat,dtype=np.bool)
            slicer[:int(0.3*num_feat)]=False
            np.random.shuffle(slicer)
            array_slicer.append(slicer)
        return array_slicer
    
    list_of_Boolean = boolean_slicer(20,8)
    for i in popo:
        print(i.tolist())
    
    h2o.init(min_mem_size_GB=8)    
    #Transform data into a H2O Frame
    H20_df = h2o.H2OFrame(X_train)
    print(H20_df)
    
    for i in list_of_Boolean:
        print (i)
        i = 1*i
        i = i.astype(int)
        print(H20_df[:,i.tolist()])
    

    【讨论】:

      猜你喜欢
      • 2018-08-13
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      相关资源
      最近更新 更多