我有一个数据框,其中一列在每一行都有一个字符串列表。
平均而言,每个列表有 150 个单词,每个单词大约 6 个字符。
数据框的 700 行中的每一行都与一个文档有关,每个字符串都是该文档的一个单词;所以基本上我已经标记了文档的文字。
我想检测每个文档的语言,为此我首先尝试检测文档中每个单词的语言。
为此,我执行以下操作:
from textblob import TextBlob
def lang_detect(document):
lang_count = {}
for word in document:
if len(word) >= 4:
word_textblob = TextBlob(word)
lang_result = word_textblob.detect_language()
response = lang_count.get(lang_result)
if response is None:
lang_count[f"{lang_result}"] = 1
else:
lang_count[f"{lang_result}"] += 1
return lang_count
df_per_doc['languages_count'] = df_per_doc['complete_text'].apply(lambda x: lang_detect(x))
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到以下错误:
---------------------------------------------------------------------------
HTTPError Traceback (most recent call last)
<ipython-input-42-772df3809bcb> in <module>
25
---> 27 df_per_doc['languages_count'] = df_per_doc['complete_text'].apply(lambda x: lang_detect(x))
28
29
.
.
.
647 …Run Code Online (Sandbox Code Playgroud) 我正在使用Actions on Google(在手机上Google Assistant)并使用它Account Linking登录Auth0(登录窗口:
图像).
但是,我想从我想要的地方注销,Auth0这样我就可以从头开始测试整个过程.
我写了下面的源代码Python和Flask下面的Auth0文档(https://auth0.com/docs/logout).
from flask import Flask, render_template, request, jsonify
import requests
app = Flask(__name__)
@app.route("/", methods=['GET', 'POST'])
def index():
session['user'] = 'Poete_Maudit'
data = request.get_json()
if data is not None:
action = data["queryResult"]["action"]
else:
return 'HERE'
# Triggers actions.intent.SIGN_IN which leads to Auth0
if (action == 'sign'):
return jsonify({"payload": {
"google": {
"expectUserResponse": …Run Code Online (Sandbox Code Playgroud) 我运行具有 TF-IDF 和非 TF-IDF 特征的随机森林算法。
总共特征数量约为 130k(在对 TF-IDF 特征进行特征选择之后),训练集的观察数量约为 120k。
其中大约 500 个是非 TF-IDF 功能。
问题是随机森林在同一测试集上的准确性等
- 只有非 TF-IDF 的特征是 87%
- TF-IDF 和非 TF-IDF 特征为 76%
准确性的显着恶化在我的脑海中引发了一些问题。
我与模型训练的相关代码如下:
drop_columns = ['labels', 'complete_text_1', 'complete_text_2']
# Split to predictors and targets
X_train = df.drop(columns=drop_columns).values
y_train = df['labels'].values
# Instantiate, train and transform with tf-idf models
vectorizer_1 = TfidfVectorizer(analyzer="word", ngram_range=(1,2), vocabulary=tf_idf_feature_names_selected)
X_train_tf_idf_1 = vectorizer_1.fit_transform(df['complete_text_1'])
vectorizer_2 = TfidfVectorizer(analyzer="word", ngram_range=(1,2), vocabulary=tf_idf_feature_names_selected)
X_train_tf_idf_2 = vectorizer_2.fit_transform(df['complete_text_2'])
# Covert the general features to sparse array
X_train = …Run Code Online (Sandbox Code Playgroud) 关于使用 运行机器学习算法时的播种系统Scikit-Learn,通常提到三种不同的事情:
random.seednp.random.seedrandom_stateat SkLearn(交叉验证迭代器、ML 算法等)我已经在我的脑海这个常见问题的SkLearn有关如何解决全球直播系统和物品,其指出,这不应该是一个简单的常见问题。
我的最终问题是在运行 ML 算法时如何获得绝对可重现的结果SkLearn?
更详细地说,
np.random.seed并且不指定任何random_state,SkLearn那么我的结果是否绝对可重现?至少为了知识而提出一个问题:
np.random.seed和random_state的SkLearn是内部关系吗?如何np.random.seed影响播种系统 ( random_state)SkLearn并使其(至少在假设上)重现相同的结果?我正在运行这个:
# Hyperparameter tuning - Random Forest #
# Hyperparameters' grid
parameters = {'n_estimators': list(range(100, 250, 25)), 'criterion': ['gini', 'entropy'],
'max_depth': list(range(2, 11, 2)), 'max_features': [0.1, 0.2, 0.3, 0.4, 0.5],
'class_weight': [{0: 1, 1: i} for i in np.arange(1, 4, 0.2).tolist()], 'min_samples_split': list(range(2, 7))}
# Instantiate random forest
from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(random_state=0)
# Execute grid search and retrieve the best classifier
from sklearn.model_selection import GridSearchCV
classifiers_grid = GridSearchCV(estimator=classifier, param_grid=parameters, scoring='balanced_accuracy',
cv=5, refit=True, n_jobs=-1)
classifiers_grid.fit(X, y)
Run Code Online (Sandbox Code Playgroud)
我收到此警告:
.../anaconda/lib/python3.7/site-packages/sklearn/model_selection/_validation.py:536: …Run Code Online (Sandbox Code Playgroud) 我正在使用GridSearchCV( scikit-learn)Spark和执行网格搜索Linux。出于这个原因,我nohup ./spark_python_shell.sh > output.log &在我的bashshell 中运行以点燃 Spark 集群,并且我还运行了我的 python 脚本(见下文spark-submit \ --master yarn 'grid_search.py'):
SPARK_HOME=/u/users/******/spark-2.3.0 \
Q_CORE_LOC=/u/users/******/q-core \
ENV=local \
HIVE_HOME=/usr/hdp/current/hive-client \
SPARK2_HOME=/u/users/******/spark-2.3.0 \
HADOOP_CONF_DIR=/etc/hadoop/conf \
HIVE_CONF_DIR=/etc/hive/conf \
HDFS_PREFIX=hdfs:// \
PYTHONPATH=/u/users/******/q-core/python-lib:/u/users/******/three-queues/python-lib:/u/users/******/pyenv/prod_python_libs/lib/python2.7/site-packages/:$PYTHON_PATH \
YARN_HOME=/usr/hdp/current/hadoop-yarn-client \
SPARK_DIST_CLASSPATH=$(hadoop classpath):$(yarn classpath):/etc/hive/conf/hive-site.xml \
PYSPARK_PYTHON=/usr/bin/python2.7 \
QQQ_LOC=/u/users/******/three-queues \
spark-submit \
--master yarn 'grid_search.py' \
--executor-memory 10g \
--num-executors 8 \
--executor-cores 10 \
--conf spark.port.maxRetries=80 \
--conf spark.dynamicAllocation.enabled=False \
--conf spark.default.parallelism=6000 \ …Run Code Online (Sandbox Code Playgroud) Pandas fillna()速度非常慢,尤其是在数据框中存在大量丢失数据的情况下。
还有比它更快的方法吗?
(我知道如果我简单地删除一些包含 NA 的行和/或列会有帮助)
我想用Dialogflow和Google智能助理以及Google Transactions API创建一个聊天机器人,以便用户订购一些商品.现在我的代理包含以下四个意图:
Default Welcome Intent (文字回复:你好,你想买一个巧克力盒吗?)Default Fallback IntentInt3 (培训短语:"是的,我想登录",履行:启用webhook)Int4(事件:actions_intent_SIGN_IN,履行:启用webhook)我使用Dialogflow Json而不是Node.js将我的代理与Transactions API连接起来.我实现了所有必要的步骤来设置Account Linking为Actions on Google以Auth0作为是在帖子中描述,如下面的:
https://productforums.google.com/forum/#!topic/dialogflow/omr_2iZXLxw;context-place=forum/dialogflow
https://www.jovo.tech/blog/google-action-account-linking-auth0/
因此,现在我在对话期间询问用户手机Google智能助理 "你想登录吗?" 然后用户回答"是的,我想登录"哪个触发器Int3.在这种情况下,从我的后端通过webhook我发送以下json:
{
"payload": {
"google": {
"expectUserResponse": true,
"isSsml": false,
"noInputPrompts": [],
"systemIntent": {
"data": {
"@type": "type.googleapis.com/google.actions.v2.SignInValueSpec",
"optContext": "To make the order easier"
},
"intent": "actions.intent.SIGN_IN"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,这会使以下窗口出现在用户的屏幕上:登录窗口
所以我正在按下LOG IN WITH GOOGLE并选择我的一个Gmail帐户.但是,我在Google智能助理上收到以下错误:Sorry, something went wrong. Please …
假设我有一个包含两列的数据框,其中pandas类似于以下一列:
text label
0 This restaurant was amazing Positive
1 The food was served cold Negative
2 The waiter was a bit rude Negative
3 I love the view from its balcony Positive
Run Code Online (Sandbox Code Playgroud)
然后我在这个数据集上使用TfidfVectorizerfrom sklearn。
找到每类 TF-IDF 得分词汇量前 n 名的最有效方法是什么?
显然,我的实际数据框包含比上面 4 行更多的数据行。
我的帖子的重点是找到适用于任何类似于上面的数据框的代码;4 行数据帧或 1M 行数据帧。
我认为我的帖子与以下帖子有很多相关性:
我尝试groupby但agg收到一个空数据帧并且没有错误。
当我这样做时:
df_temp = df.groupby('Col1')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
Run Code Online (Sandbox Code Playgroud)
然后我收到按预期聚合的数据帧。
当我这样做时:
df_temp = df.groupby('Col1', 'Col2')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
Run Code Online (Sandbox Code Playgroud)
然后我收到按预期聚合的数据帧。
当我这样做时:
df_temp = df.groupby('Col1', 'Col2', 'Col3')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
Run Code Online (Sandbox Code Playgroud)
然后我收到按预期聚合的数据帧。
但是当我这样做时:
df_temp = df.groupby('Col1', 'Col2', 'Col3', 'Col4')['InfoType', 'InfoLabel1', 'InfoLabel2'].agg(lambda x: ', '.join(x))
Run Code Online (Sandbox Code Playgroud)
然后我收到一个空数据帧并且没有错误。
但是,我不认为问题是Col4因为当我删除Col2并仍然保留Col4时,我收到了按预期聚合的数据帧。
为什么会发生这种情况?
'Col1'、'Col2'、'Col3'、'Col4' 属于不同类型,但我不认为这是问题,因为例如 Col1'、'Col2'、'Col3' 也属于不同类型,但聚合当我仅对这些进行分组时有效。
是否与这些列中的 NA 有关?
聚苯乙烯
我知道最好有我的数据的具体示例,但将它们发布在这里太耗时,而且我根本不想公开我的数据。
PS2
我做了以下事情。在之前groupby,我用值填充了np.nan(例如 -1 代表浮点数,'NA' 代表对象)并且代码有效,所以我对 NA 的最初假设可能是正确的。请随意分享为什么会发生这种情况。
python ×8
scikit-learn ×4
auth0 ×2
grid-search ×2
pandas ×2
flask ×1
linux ×1
missing-data ×1
ngrok ×1
python-3.x ×1
random-seed ×1
textblob ×1
tf-idf ×1