我正在从头开始实现一个简单的神经网络,仅供练习。我已经让它可以很好地处理二元分类问题的 sigmoid、tanh 和 ReLU 激活。我现在尝试用它来解决多类、互斥的问题。当然,softmax 是最好的选择。
不幸的是,我在理解如何在反向传播中实现 softmax、交叉熵损失及其导数时遇到了很多困难。即使在这里和交叉验证上问了几个问题后,我也无法得到任何好的指导。
在我尝试进一步实现 softmax 之前,是否可以以某种方式使用 sigmoid 来解决多类问题(我试图预测 n 个字符中的 1 个,这些字符被编码为 one-hot 向量)?如果是这样,哪种损失函数最好?我一直在对所有二元分类使用平方误差。
classification machine-learning softmax activation-function sigmoid
我是机器学习新手,也是Kaggle 上泰坦尼克号问题的新手。我编写了一个简单的算法来预测测试数据的结果。
我的问题/困惑是,每次我使用相同的数据集和相同的步骤执行算法时,得分值都会发生变化(代码中的最后一条语句)。我无法理解这种行为?
代码:
# imports
import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
# load data
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
results = pd.read_csv('gender_submission-orig.csv')
# prepare training and test dataset
y = train['Survived']
X = train.drop(['Survived', 'SibSp', 'Ticket', 'Cabin', 'Embarked', 'Name'], axis=1)
test = test.drop(['SibSp', 'Ticket', 'Cabin', 'Embarked', 'Name'], axis=1)
y_test = results['Survived']
X = pd.get_dummies(X)
test = pd.get_dummies(test)
# fill the missing values
age_median = X['Age'].median()
fare_median = X['Fare'].median()
X['Age'] = …Run Code Online (Sandbox Code Playgroud) python classification machine-learning decision-tree scikit-learn
我正在阅读“Spark The Definitive Guide”,我在 MLlib 章节中遇到了一个代码部分,其中包含以下代码:
var df = spark.read.json("/data/simple-ml")
df.orderBy("value2").show()
import org.apache.spark.ml.feature.RFormula
// Unable to understand the interpretation of this formulae
val supervised = new RFormula().setFormula("lab ~ . + color:value1 + color:value2")
val fittedRF = supervised.fit(df)
val preparedDF = fittedRF.transform(df)
preparedDF.show()
Run Code Online (Sandbox Code Playgroud)
其中 /data/simple-ml 包含一个 JSON 文件,其中包含(例如):-
“实验室”:“好”,“颜色”:“绿色”,“值1”:1,“值2”:14.386294994851129 “实验室”:“坏”,“颜色”:“蓝色”,“值1”:8,”值2":14.386294994851129"实验室":"坏","颜色":"蓝色","值1":12,"值2":14.386294994851129"实验室":"好","颜色":"绿色","值1" :15,“值2”:38.9718713375581
您可以在https://github.com/databricks/Spark-The-Definitive-Guide/blob/master/data/simple-ml/part-r-00000-f5c243b9-a015-4a3b-a4a8-找到完整的数据集eca00f80f04c.json 及以上行产生的输出为:-
[绿色,好,1,14.386294994851129, (10,[0,2,3,4,7],[1.0,1.0,14.386294994851129,1.0,14.386294994851129]) ,0.0]
[蓝色,坏,8,14.38629499485112 9、(10 ,[2,3,6,9],[8.0,14.386294994851129,8.0,14.386294994851129]) ,1.0]
[蓝色,坏,12,14.386294994851129, (10,[2,3,6,9],[12.0,14.38629499 4851129 ,12.0,14.386294994851129]) ,1.0]
[绿色,好,15,38.97187133755819, (10,[0,2,3,4,7],[1.0,15.0,38.97187133755819,15.0,38.9718713375581 9]) ,0.0]
现在我无法理解它如何计算第五列(以粗体标记)列值。
classification machine-learning apache-spark apache-spark-mllib
我使用 tidymodels 框架拟合多项式逻辑回归模型来预测鸢尾花数据集中的物种。
library(tidymodels)
iris.lr = multinom_reg(
mode="classification",
penalty=NULL,
mixture=NULL
) %>%
set_engine("glmnet")
iris.fit = iris.lr %>%
fit(Species ~. , data = iris)
Run Code Online (Sandbox Code Playgroud)
然后我想查看模型的系数并写出公式。我的理解是我应该从 iris.fit 获取这个。
iris.fit 的输出有一个 100 行表,其中包含 Df、%Dev 、Lambda。iris 数据集只有 4 个预测变量。如何将此输出转换为系数?
我一直在尝试将我的训练集安装到 KMeans 集群上,并将其预测到测试测试中,但它对我来说至少已经尝试了一周了。我很好奇我是否正在解释 KMeans 的使用方式?有人告诉我它无人监管。这是否意味着如果它知道训练数据如何聚类,就不能用于预测聚类?
谢谢。
我正在使用随机森林进行二元分类。我的数据集不平衡,比例为 77:23。我的数据集形状是 (977, 7)
我最初尝试了以下方法
model = RandomForestClassifier(class_weight='balanced',max_depth=5,max_features='sqrt',n_estimators=300,random_state=24)
model.fit(X_train,y_train)
y_pred = mode.predict(X_test)
Run Code Online (Sandbox Code Playgroud)
但是,现在我想在随机森林训练期间应用交叉验证,然后使用该模型来预测测试数据的 y 值。所以,我做了下面的事情
model = RandomForestClassifier(class_weight='balanced',max_depth=5,max_features='sqrt',n_estimators=300,random_state=24)
scores = cross_val_score(model,X_train, y_train,cv=10, scoring='f1')
y_pred = cross_val_predict(model,X_test,cv=10)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这是不正确的。如何在训练随机森林期间应用交叉验证,然后使用该交叉验证模型来y_pred正确预测?
python classification machine-learning prediction random-forest
我正在使用随机森林模型和神经网络进行二元分类,其中使用 SHAP 来解释模型预测。我按照教程编写了下面的代码以获得如下所示的瀑布图
在Sergey Bushmanaov 的 SO 帖子的帮助下,我成功地将瀑布图导出到数据框。但这不会复制列的特征值。它仅复制 shap 值、expected_value 和特征名称。但我也想要功能名称。所以,我尝试了以下方法
shap.waterfall_plot(shap.Explanation(values=shap_values[1])[4],base_values=explainer.expected_value[1],data=ord_test_t.iloc[4],feature_names=ord_test_t.columns.tolist())
Run Code Online (Sandbox Code Playgroud)
但这引发了一个错误
类型错误:瀑布()得到了意外的关键字参数“base_values”
我希望我的输出如下所示。我使用 1 点的背景来计算基值。但您也可以自由使用背景 1,10 或 100。在下面的输出中,我将值和特征存储在名为 的一列中Feature。这是类似的东西LIME。但不确定 SHAP 是否有这种灵活性来做到这一点?
更新 - 情节
更新代码 - 内核解释器瀑布到数据帧
masker = Independent(X_train, max_samples=100)
explainer = KernelExplainer(rf_boruta.predict,X_train)
bv = explainer.expected_value
sv = explainer.shap_values(X_train)
sdf_train = pd.DataFrame({
'row_id': X_train.index.values.repeat(X_train.shape[1]),
'feature': X_train.columns.to_list() * X_train.shape[0],
'feature_value': X_train.values.flatten(),
'base_value': bv,
'shap_values': sv.values[:,:,1].flatten() # i changed this to pd.DataFrame(sv).values[:,1].flatten()
})
Run Code Online (Sandbox Code Playgroud) 有人可以告诉我每个班级的培训样本量是否需要相等?
我可以采取这种情况吗?
class1 class2 class3
samples 400 500 300
Run Code Online (Sandbox Code Playgroud)
或者所有类别的样本量是否相等?
我正在使用scikit-learn来构建一个由svm训练和测试的样本分类器.现在我想分析分类器并找到explain_variance_score,但我不明白这个分数.例如,我得到了clf的分类报告,它看起来像这样......
precision recall f1-score support
0.0 0.80 0.80 0.80 10
1.0 0.80 0.80 0.80 10
avg / total 0.80 0.80 0.80 20
Run Code Online (Sandbox Code Playgroud)
还不错,但EVS只是0.2......有时-0.X...... 它怎么会发生这种情况呢?拥有一个好的EVS是否重要?也许有人可以解释我这个......
Y_true和Y_pred:
[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0.]
[ 1. 1. 1. 1. 1. 0. 0. 1. 1. 1. 1. 0. 0. 0. 0. 0. 1. 0.
0. 0.]
Run Code Online (Sandbox Code Playgroud) 我见过的大多数示例都在最后一层实现softmax。但是我读到categorical_crossentropyKeras在最后一层之后自动应用softmax,因此这样做是多余的,并导致性能降低。谁是对的?
classification ×10
python ×4
scikit-learn ×2
softmax ×2
algorithm ×1
apache-spark ×1
data-mining ×1
k-means ×1
keras ×1
knn ×1
prediction ×1
r ×1
shap ×1
sigmoid ×1
statistics ×1
svm ×1
tensorflow ×1
tidymodels ×1