标签: data-science

我的 Davies-Bouldin 索引的 python 实现正确吗?

我正在尝试用Python计算Davies-Bouldin 指数。

以下是下面的代码尝试重现的步骤。

5 个步骤

  1. 对于每个簇,计算每个点到质心之间的欧氏距离
  2. 对于每个簇,计算这些距离的平均值
  3. 对于每对簇,计算它们质心之间的欧氏距离

然后,

  1. 对于每对簇,求其到各自质心的平均距离之和(在步骤 2 中计算),并将其除以它们之间的距离(在步骤 3 中计算)。

最后,

  1. 计算所有这些划分(=所有索引)的平均值以获得整个聚类的 Davies-Bouldin 索引

代码

def daviesbouldin(X, labels, centroids):

    import numpy as np
    from scipy.spatial.distance import pdist, euclidean
    
    nbre_of_clusters = len(centroids) #Get the number of clusters
    distances = [[] for e in range(nbre_of_clusters)] #Store intra-cluster distances by cluster
    distances_means = [] #Store the mean of these distances
    DB_indexes = [] #Store Davies_Boulin index of each pair of cluster
    second_cluster_idx = [] #Store index of …
Run Code Online (Sandbox Code Playgroud)

python statistics metrics cluster-analysis data-science

5
推荐指数
1
解决办法
9877
查看次数

虚拟变量,有必要标准化吗?

我有以下表示为numpy数组的数据集

\n\n
direccion_viento_pos\n\n    Out[32]:\n\n    array([[\'S\'],\n           [\'S\'],\n           [\'S\'],\n           ...,\n           [\'SO\'],\n           [\'NO\'],\n           [\'SO\']], dtype=object)\n
Run Code Online (Sandbox Code Playgroud)\n\n

该数组的维度为:

\n\n
direccion_viento_pos.shape\n(17249, 8)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我正在使用 python 和 scikit learn 以这种方式编码这些分类变量:

\n\n
from __future__ import unicode_literals\nimport pandas as pd\nimport numpy as np\n# from sklearn import preprocessing\n# from matplotlib import pyplot as plt\nfrom sklearn.preprocessing import MinMaxScaler\nfrom sklearn.preprocessing import LabelEncoder, OneHotEncoder\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我创建一个标签编码器对象:

\n\n
labelencoder_direccion_viento_pos = LabelEncoder() \n
Run Code Online (Sandbox Code Playgroud)\n\n

我采用列位置 0(唯一列)direccion_viento_pos并应用fit_transform()寻址其所有行的方法:

\n\n
 direccion_viento_pos[:, 0] = labelencoder_direccion_viento_pos.fit_transform(direccion_viento_pos[:, 0]) \n
Run Code Online (Sandbox Code Playgroud)\n\n

我的direccion_viento_pos是这样的:

\n\n …

python scikit-learn dummy-variable data-science

5
推荐指数
1
解决办法
1万
查看次数

如何在Python中根据年份分割数据框?

我有一个名为“dataframe”的数据框,其中包含一堆特定日期的销售信息。每个日期条目的格式为 YYYY-MM-DD,数据范围从 2012 年到 2017 年。我想将此数据框拆分为 6 个单独的数据框,每年一个。例如,第一个分割数据帧将包含 2012 年的所有条目。

我想我可以在下面的代码中做到这一点。我将数据框分成每年一个,并将它们放入“年”列表中。但是,当我尝试在每个数据帧上运行 auto_arima 时,我收到错误“发现样本数量不一致的输入变量”。

我认为这是因为我没有正确分割原始数据框。如何根据年份正确分割数据框?

#Partition data into years
years = [g for n, g in dataframe.set_index('Date').groupby(pd.Grouper(freq='Y'))]

#Create a list that will hold all auto_arima results for every dataframe
stepwise_models = []

#Call auto_arima on every dataframe
for x in range(len(years)-1):
    currentDf = years[x]
    model = auto_arima(currentDf['price'], exogenous=xreg, start_p=1, start_q=1,
        max_p=3, max_q=3, m=12,
        start_P=0, seasonal=True,
        d=1, D=1, trace=True,
        error_action='ignore',  
        suppress_warnings=True, 
        stepwise=True)
    stepwise_models.append(model) #Store current auto_arima result in our stepwise_models[] list
Run Code Online (Sandbox Code Playgroud)

python statistics pandas data-science pyramid-arima

5
推荐指数
1
解决办法
1万
查看次数

SMOTETomek - 如何将比率设置为固定余额的字典

我尝试使用这种技术来纠正非常不平衡的类别。

我的数据集有类,例如:

In [123]:
data['CON_CHURN_TOTAL'].value_counts()

Out[123]:
0    100
1     10
Name: CON_CHURN_TOTAL, dtype: int64
Run Code Online (Sandbox Code Playgroud)

我想使用 SMOTETomek 对 0 类进行欠采样并对 1 类进行采样,以达到 80 : 20 的比例。但是,我找不到纠正字典的方法。当然,在完整代码中,80:20 的比例将根据行数计算。

当我尝试时:

from imblearn.combine import SMOTETomek
smt = SMOTETomek(ratio={1:20, 0:80})
Run Code Online (Sandbox Code Playgroud)

我有错误:

ValueError:使用过采样方法时,类中的样本数应大于或等于原始样本数。本来有100个样品,问了80个样品。

但这种方法应该适合同时进行欠采样和过采样。

不幸的是,由于 404 错误,该纪录片现在无法播放。

python python-3.x scikit-learn data-science

5
推荐指数
1
解决办法
5862
查看次数

Google Apps 脚本的数据分析库

有没有用于数据分析和矩阵运算的GAS库?像 Python numpy&pandas或 JavaScript numjs&之类的东西undescorejs。我想在GAS中做一些统计操作。

statistics data-analysis google-apps-script data-science

5
推荐指数
1
解决办法
1068
查看次数

使用 ax.bar() 使用 matplotlib 绘制多个条形图

跟进我之前的问题:按小时将日期时间对象排序到 pandas 数据框,然后可视化为直方图

我需要为代表观看者计数的一个 X 轴值绘制 3 个条形图。现在他们显示一分钟以内或以上的内容。我需要一个向全体观众展示的内容。我有数据框,但我似乎无法让它们看起来正确。只要有 2 个栏,我就没有问题,看起来就像我想要有两个栏: 我需要为代表观看者计数的一个 X 轴值绘制 3 个条形图。

代码的相关部分:

# Time and date stamp variables
allviews = int(df['time'].dt.hour.count())
date = str(df['date'][0].date())
hours = df_hist_short.index.tolist()
hours[:] = [str(x) + ':00' for x in hours]
Run Code Online (Sandbox Code Playgroud)

我用来表示 X 轴的小时变量可能有问题,因为我将其转换为字符串,这样我就可以使小时看起来像而不23:00只是 pandas 索引输出23等。我见过人们添加或减去值的示例X 更改条形位置。

fig, ax = plt.subplots(figsize=(20, 5))
short_viewers = ax.bar(hours, df_hist_short['time'], width=-0.35, align='edge')
long_viewers = ax.bar(hours, df_hist_long['time'], width=0.35, align='edge')
Run Code Online (Sandbox Code Playgroud)

现在我设置了align='edge',两个宽度值是绝对值和负值。但我不知道如何让它看起来正确的 3 条。我没有找到任何关于酒吧的定位参数。我也尝试使用 plt.hist() 但无法获得与 plt.bar() 函数相同的输出。

因此,我希望在左侧上方显示的图表上有第三个条形图,比其他两个条形图稍宽一些。

python data-visualization matplotlib pandas data-science

5
推荐指数
2
解决办法
2万
查看次数

如何在不拆分数据帧的情况下传递不同的数据集进行训练和测试。(Python)?

我已经解决了多个问题,这些问题有助于将数据帧分为训练和测试,使用 scikit 或不使用 scikit 等。

但我的问题是我有 2 个不同的 csv(来自不同年份的 2 个不同的数据帧)。我想用一个作为火车,另一个作为测试?

对于线性回归/任何模型如何做到这一点?

python linear-regression training-data scikit-learn data-science

5
推荐指数
1
解决办法
3066
查看次数

Numpy Arange 生成小数点不一致的值

有人可以解释一下这里发生了什么吗?

为什么 0.3 和 0.7 的值有更多的小数点?我只想要 1 位小数点值。

threshold_range = np.arange(0.1,1,0.1)
threshold_range.tolist()
Run Code Online (Sandbox Code Playgroud)
[Output]: [0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7000000000000001, 0.8, 0.9]
Run Code Online (Sandbox Code Playgroud)

python numpy python-3.x data-science

5
推荐指数
1
解决办法
5173
查看次数

无法将卷安装到spark.kubernetes.executor

我正在尝试使用 kubernetes 以 Spark 集群模式从服务器读取文件,因此我将文件放在所有工作人员上,并使用
val conf = new SparkConf().setAppName("sparksetuptest") .set("spark. kubernetes.driver.volumes.hostPath.host.mount.path”,“/文件目录”)

这里一切正常,但是当我执行时,它显示在特定位置找不到该文件。所以我用 .set("spark.kubernetes.executor.volumes.hostPath.host.mount.path", "/file-directory") 将目录安装到执行器,但现在我无法执行程序,它陷入了永无休止的状态获取数据时进行处理。

请提出建议,以便我可以使用执行器挂载我的目录并读取该文件。

scala apache-spark kubernetes server data-science

5
推荐指数
1
解决办法
2419
查看次数

在没有 Spark 上下文的情况下在推理时使用 PySpark 管道模型

工作流程

  • 为了预处理我们的原始数据,我们使用 PySpark。由于数据的大小,我们需要使用 Spark。
  • PySpark 预处理作业使用管道模型,允许您将预处理逻辑导出到文件。
  • 通过管道模型导出预处理逻辑,您可以在推理时加载管道模型。像这样,您不需要对预处理逻辑进行两次编码。
  • 在推理时,我们更愿意在没有 Spark 上下文的情况下执行预处理步骤。Spark Context 在推理时是多余的,它会减慢执行推理所需的时间。

我正在查看Mleap,但这仅支持 Scala 语言在没有 Spark 上下文的情况下进行推理。由于我们使用 PySpark,所以坚持使用 Python 语言会很好。

问题:什么是一个好的替代方案,可以让您在训练阶段在 (Py)Spark 中构建管道模型,并让您使用 Python 语言重用此管道模型,而不需要 Spark 上下文?

machine-learning inference-engine pyspark apache-spark-ml data-science

5
推荐指数
0
解决办法
391
查看次数