python - pyLDAvis:“ValuesView”类型的对象不是 JSON 可序列化的
问题描述
我正在尝试使用pyLDAvis显示非负矩阵分解的结果,可以将其作为主题模型进行处理。该模型是使用sklearn 的 NMF构建的。我正在做所有需要的缩放和转换,然后我以这种方式提供pyLDAvis.prepare():
code_vis_data_mmds = pyLDAvis.prepare(topic_term_dists = nmf_frobenius_cd_X_manual.components_, doc_topic_dists = pd.DataFrame(doc_topic_dists), doc_lengths = doc_lengths, vocab = dictionary.values(), term_frequency = term_frequency, mds='mmds')
- topic_term_dists 参数将我的 NMF 中的 components_ 作为值
- doc_topic_dists 应用于我的 tf-idf 矩阵的 NMF 模型的变换方法的结果
- 词汇是我自己在数据集上计算的gensim 的语料库字典,用于构建 tf-idf 矩阵
- 术语频率来自我的计数矩阵上沿轴的总和,也是从字典中构建的
这部分代码引发了一个弃用警告,如下所示
C:\Users\VDE10\Anaconda3\lib\site-packages\pyLDAvis_prepare.py:387: DeprecationWarning: .ix 已弃用。请使用 .loc 进行基于标签的索引或使用 .iloc 进行位置索引
除此之外,我还收到三个运行时警告:
TypeError Traceback (most recent call last)
<ipython-input-48-59ece996466e> in <module>()
44 # pyLDAvis.save_html(code_vis_data_pcoa,"LDA_vis_pcoa.html")
45
---> 46 pyLDAvis.display(code_vis_data_mmds)
~\Anaconda3\lib\site-packages\pyLDAvis\_display.py in display(data, local, **kwargs)
220 kwargs['d3_url'], kwargs['ldavis_url'], kwargs['ldavis_css_url'] = write_ipynb_local_js()
221
--> 222 return HTML(prepared_data_to_html(data, **kwargs))
223
224 def show(data, ip='127.0.0.1', port=8888, n_retries=50,
~\Anaconda3\lib\site-packages\pyLDAvis\_display.py in prepared_data_to_html(data, d3_url, ldavis_url, ldavis_css_url, template_type, visid, use_http)
176 d3_url=d3_url,
177 ldavis_url=ldavis_url,
--> 178 vis_json=data.to_json(),
179 ldavis_css_url=ldavis_css_url)
180
~\Anaconda3\lib\site-packages\pyLDAvis\_prepare.py in to_json(self)
415
416 def to_json(self):
--> 417 return json.dumps(self.to_dict(), cls=NumPyEncoder)
~\Anaconda3\lib\json\__init__.py in dumps(obj, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, default, sort_keys, **kw)
236 check_circular=check_circular, allow_nan=allow_nan, indent=indent,
237 separators=separators, default=default, sort_keys=sort_keys,
--> 238 **kw).encode(obj)
239
240
~\Anaconda3\lib\json\encoder.py in encode(self, o)
197 # exceptions aren't as detailed. The list call should be roughly
198 # equivalent to the PySequence_Fast that ''.join() would do.
--> 199 chunks = self.iterencode(o, _one_shot=True)
200 if not isinstance(chunks, (list, tuple)):
201 chunks = list(chunks)
~\Anaconda3\lib\json\encoder.py in iterencode(self, o, _one_shot)
255 self.key_separator, self.item_separator, self.sort_keys,
256 self.skipkeys, _one_shot)
--> 257 return _iterencode(o, 0)
258
259 def _make_iterencode(markers, _default, _encoder, _indent, _floatstr,
~\Anaconda3\lib\site-packages\pyLDAvis\utils.py in default(self, obj)
144 if isinstance(obj, np.float64) or isinstance(obj, np.float32):
145 return float(obj)
--> 146 return json.JSONEncoder.default(self, obj)
~\Anaconda3\lib\json\encoder.py in default(self, o)
178 """
179 raise TypeError("Object of type '%s' is not JSON serializable" %
--> 180 o.__class__.__name__)
181
182 def encode(self, o):
TypeError: Object of type 'ValuesView' is not JSON serializable
我看到人们在这个问题上遇到了类似的错误,但他们的解决方案与我的问题不对应。任何帮助将不胜感激,请随时询问更多详细信息。
解决方案
推荐阅读
- docker - UTF-8 编码在 Docker 中不起作用
- javascript - react-router-dom 开关需要额外的 div 包装器
- macos - 我正在尝试清理 OSX 10.13 中的 usr/local 文件夹
- java - java.lang.SecurityManager 中的初始化字段是做什么用的?
- wordpress - 子主题显示空白页
- batch-file - 批处理脚本回显动态变量
- android-asynctask - 作业调度程序不会在 android 的给定时间上重复其工作
- haskell - Haskell:翻转功能的目的?
- quantum-computing - 在 Q# 中循环遍历数组
- powerbi - Power BI:将重复表转换为参考表