当前位置: 首页 > 面试题库 >

合并来自原始pandas DataFrame的model.predict()结果?

长孙阳嘉
2023-03-14
问题内容

我正在尝试将predict方法的结果与pandas.DataFrame对象中的原始数据合并在一起。

from sklearn.datasets import load_iris
from sklearn.cross_validation import train_test_split
from sklearn.tree import DecisionTreeClassifier
import pandas as pd
import numpy as np

data = load_iris()

# bear with me for the next few steps... I'm trying to walk you through
# how my data object landscape looks... i.e. how I get from raw data 
# to matrices with the actual data I have, not the iris dataset
# put feature matrix into columnar format in dataframe
df = pd.DataFrame(data = data.data)

# add outcome variable
df['class'] = data.target

X = np.matrix(df.loc[:, [0, 1, 2, 3]])
y = np.array(df['class'])

# finally, split into train-test
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size = 0.8)

model = DecisionTreeClassifier()

model.fit(X_train, y_train)

# I've got my predictions now
y_hats = model.predict(X_test)

要将这些预测与原始预测合并起来df,我可以尝试以下方法:

df['y_hats'] = y_hats

但这引起了:

ValueError:值的长度与索引的长度不匹配

我知道可以将分解dftrain_dftest_df并且这个问题可以解决,但实际上,我需要按照上述路径创建矩阵,X并且y(我的实际问题是文本分类问题,在分解之前,我要对
整个 特征矩阵进行归一化培训和测试)。df由于y_hats数组的索引为零,并且关于 哪些
行包含在中X_testy_test丢失了,因此如何将这些预测值与我的适当行对齐?还是将我降级为先将数据帧拆分为训练测试,然后再构建特征矩阵?我想只需填写包括在行trainnp.nan
数据框中的值。


问题答案:

您的y_hats长度仅是测试数据上的长度(20%),因为您在X_test上进行了预测。一旦模型通过验证并且对测试预测满意(通过检查模型在X_test预测上与X_test真实值相比的准确性),您应该在完整数据集(X)上重新运行预测。将这两行添加到底部:

y_hats2 = model.predict(X)

df['y_hats'] = y_hats2

*根据您的评论进行 *编辑 ,这是一个更新的结果,返回带有预测的数据集并附加在测试数据集中

from sklearn.datasets import load_iris
from sklearn.cross_validation import train_test_split
from sklearn.tree import DecisionTreeClassifier
import pandas as pd
import numpy as np

data = load_iris()

# bear with me for the next few steps... I'm trying to walk you through
# how my data object landscape looks... i.e. how I get from raw data 
# to matrices with the actual data I have, not the iris dataset
# put feature matrix into columnar format in dataframe
df = pd.DataFrame(data = data.data)

# add outcome variable
df_class = pd.DataFrame(data = data.target)

# finally, split into train-test
X_train, X_test, y_train, y_test = train_test_split(df,df_class, train_size = 0.8)

model = DecisionTreeClassifier()

model.fit(X_train, y_train)

# I've got my predictions now
y_hats = model.predict(X_test)

y_test['preds'] = y_hats

df_out = pd.merge(df,y_test[['preds']],how = 'left',left_index = True, right_index = True)


 类似资料:
  • 我正在研究一个合并排序,它对int[]进行排序。我的mergeSort方法接受数组、startindex和EndIndex。我还输出了main方法中的before和after。after数组的结果与before相同。我看不出我的ALG做错了什么。我一直在查阅其他人对合并的看法,看起来我做得很对。显然不是,因为列表没有排序…我的合并排序算法做错了什么? 更新:所以我对我的代码做了一些修改,看起来分割

  • 我正在从一个可观察的列表中设置一个ListView,该列表有另一个集合的输入(在本例中是一个链表)。因此,我在这个答案中找到了如何使列表视图的项从中移除(我不太确定它们是否也从ObservableList中移除),那么还有什么可能的方法可以在两个集合(即ObservableList和原始集合)中进行修改呢? 下面是一段代码:

  • 问题内容: (对不起,还有很长的问题!)我最近一直在尝试将Go(而不是C ++)用于我作为辅助项目正在开发的游戏服务器模拟器,并质疑我是否以明智的Go术语来实现它。如您所料,服务器通过发送符合特定协议规范的原始数据包(TCP)与一个或多个游戏客户端进行通信。相关部分如下所示: 接收标头->解密->接收字节,直到达到标头长度->解密其余数据包->分派给处理程序->解码数据包->根据需要处理->发送响

  • 有一个请求队列,回复队列由客户端服务器实例创建,并固定到每个实例,而不是使用临时队列。 用例需要获取入站jms消息,然后将该消息发送到异步进程。一旦从服务接收到异步回复消息,我需要获取这些结果并回复原始消息的jmsReplyTo。Jms网关在这种情况下不起作用AFAIK 我正在使用jms消息驱动的通道适配器来处理带有一系列通道和服务激活器的消息,以处理进程外调用和异步回复。我正在尝试使用Dynam

  • 我的spark流媒体工作中有3名执行者,这项工作消耗了Kafka的资源。执行器计数取决于主题中的分区计数。当此主题中的消息被使用时,我开始查询Hazelcast。每个执行器都会在hazelcast上查找某些筛选操作的结果,并返回重复的结果。因为当executor返回数据而其他executor找到相同的数据时,数据状态不会更新。 我的问题是,是否有一种方法可以将所有结果合并到一个列表中,该列表由执行

  • 我的Android项目中的raw文件夹中有各种音频文件。我的代码不起作用。当我单击共享按钮应用程序时,它崩溃了。 这是我的代码: 和Android清单添加:

  • 问题内容: 我正在尝试编写一个函数来汇总并在Pandas中的数据框上执行各种统计数据计算,然后将其合并到原始数据框,但是,我遇到了问题。这与SQL中的代码等效: 然后加入原始表: 步骤如下:将数据加载到 :>> 出:>> 步骤2:对数据进行计算和分组: 我的熊猫代码如下: 在我想加入原始表之前,此方法可以正常工作: IN:>> OUT:>> KeyError:您没有名为EID的项目 由于某种原因,

  • 我有索引,其中每个文档都有这样的结构: 我需要计算每个演员对应的电影数量(演员可以在actor_1_name、actor_2_name或actor_3_name字段中) 这3个字段的映射是: 有没有一种方法,我可以聚合的结果,可以结合所有3个演员领域的条款,并给出一个单一的聚合。 目前,我正在为每个actor字段创建单独的聚合,并通过我的JAVA代码将这些不同的聚合合并成一个。 通过创建不同的聚合