标签: classification

用于多类分类的 Sigmoid 激活?

我正在从头开始实现一个简单的神经网络,仅供练习。我已经让它可以很好地处理二元分类问题的 sigmoid、tanh 和 ReLU 激活。我现在尝试用它来解决多类、互斥的问题。当然,softmax 是最好的选择。

不幸的是,我在理解如何在反向传播中实现 softmax、交叉熵损失及其导数时遇到了很多困难。即使在这里和交叉验证上问了几个问题后,我也无法得到任何好的指导。

在我尝试进一步实现 softmax 之前,是否可以以某种方式使用 sigmoid 来解决多类问题(我试图预测 n 个字符中的 1 个,这些字符被编码为 one-hot 向量)?如果是这样,哪种损失函数最好?我一直在对所有二元分类使用平方误差。

classification machine-learning softmax activation-function sigmoid

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

机器学习算法分数变化,数据或步骤没有任何变化

我是机器学习新手,也是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

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

Spark R公式解释

我正在阅读“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

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

如何获得防风草多项逻辑回归模型的系数?

我使用 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 个预测变量。如何将此输出转换为系数?

statistics r classification data-analysis tidymodels

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

KMeans Clustering 它能预测看不见的数据吗?

我一直在尝试将我的训练集安装到 KMeans 集群上,并将其预测到测试测试中,但它对我来说至少已经尝试了一周了。我很好奇我是否正在解释 KMeans 的使用方式?有人告诉我它无人监管。这是否意味着如果它知道训练数据如何聚类,就不能用于预测聚类?

谢谢。

classification cluster-analysis k-means

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

如何对随机森林进行交叉验证?

我正在使用随机森林进行二元分类。我的数据集不平衡,比例为 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

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

使用 shap 包获取数据框中某个特征的瀑布图值

我正在使用随机森林模型和神经网络进行二元分类,其中使用 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)

python classification machine-learning random-forest shap

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

k最近邻分类器训练每个班级的样本量

有人可以告诉我每个班级的培训样本量是否需要相等?

我可以采取这种情况吗?

          class1   class2  class3
samples    400      500     300
Run Code Online (Sandbox Code Playgroud)

或者所有类别的样本量是否相等?

algorithm classification machine-learning data-mining knn

0
推荐指数
1
解决办法
4317
查看次数

scikit-learn - explain_variance_score

我正在使用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)

python classification machine-learning svm scikit-learn

0
推荐指数
1
解决办法
1079
查看次数

使用Keras categorical_crossentropy损失时,是否应该在最后一层使用softmax?

我见过的大多数示例都在最后一层实现softmax。但是我读到categorical_crossentropyKeras在最后一层之后自动应用softmax,因此这样做是多余的,并导致性能降低。谁是对的?

classification neural-network keras tensorflow softmax

0
推荐指数
1
解决办法
606
查看次数