【Numpy】np.tile举例理解

np.tile()

仔细观察数据前后的shape,便可知晓该函数的用法。

  • 在原始数据shape基础上,对应轴扩展几倍。

  • 例如,原始数据x的shape是(2, 3),np.tile(x, [1,2])表示扩展后的数据shape为(2x1, 3x2),即行数不变,列数扩展为之前的两倍,因此shape为(2, 6)。

  • 类似地,tf.tile()也是对tensor做同样的扩展操作。

# shape为(2, 3)
x = np.array([[1, 2, 3], [4, 5, 6]])	# => [[1, 2, 3], [4, 5, 6]]
# shape为(2, 6)
tile_x = np.tile(x, [1, 2])		# => [[1, 2, 3, 1, 2, 3], [4, 5, 6, 4, 5, 6]]
# shape为(4, 3)
tile_x = np.tile(x, [2, 1])		# => [[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]]
卡方分箱原理是一种常用的特征离散化方法,它的基本思想是将连续的数值型变量离散化成若干个区间,然后用每个区间的卡方值作为该区间的权重,从而实现特征的离散化。具体实现过程如下: 1. 将连续的数值型变量按照一定的分割点划分成若干个区间。 2. 对于每个区间,统计样本在该区间内的数量和期望数量,计算出该区间的卡方值。 3. 将所有区间的卡方值相加,得到特征的卡方值。 4. 根据特征的卡方值,选择合适的分割点,将特征离散化成若干个区间。 Python中可以使用pandas和numpy库来实现卡方分箱,具体实现方法可以参考以下代码: import pandas as pd import numpy as np # 生成测试数据 data = pd.DataFrame({'x': np.random.normal(0, 1, 1000)}) # 将x离散化成10个区间 data['x_bin'] = pd.cut(data['x'], bins=10) # 计算每个区间的卡方值 observed = pd.crosstab(data['x_bin'], columns='count') expected = np.tile(observed.sum(axis=0), (observed.shape[0], 1)) / observed.sum() chi2 = ((observed - expected) ** 2 / expected).sum() # 根据卡方值选择合适的分割点 bins = np.histogram(data['x'], bins='auto')[1] chi2_values = [] for i in range(1, len(bins)): x1 = data[data['x'] <= bins[i - 1]]['x_bin'] x2 = data[data['x'] > bins[i - 1]]['x_bin'] observed = pd.crosstab(x1, x2) expected = np.tile(observed.sum(axis=0), (observed.shape[0], 1)) / observed.sum() chi2_values.append(((observed - expected) ** 2 / expected).sum()) best_idx = np.argmax(chi2_values) best_chi2 = chi2_values[best_idx] best_bin = (bins[best_idx], bins[best_idx + 1])
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值