我正在尝试实现SVM损失函数及其渐变.我找到了一些实现这两个的示例项目,但是在计算渐变时我无法弄清楚它们如何使用loss函数.
我无法理解的是,在计算渐变时如何使用损失函数的结果?
示例项目按如下方式计算渐变:
for i in xrange(num_train):
scores = X[i].dot(W)
correct_class_score = scores[y[i]]
for j in xrange(num_classes):
if j == y[i]:
continue
margin = scores[j] - correct_class_score + 1 # note delta = 1
if margin > 0:
loss += margin
dW[:,j] += X[i]
dW[:,y[i]] -= X[i]
Run Code Online (Sandbox Code Playgroud)
dW用于梯度结果.X是训练数据的数组.但是我不明白损失函数的导数是如何产生这个代码的.
我想对我的数据进行一些预处理,我想删除稀疏的行(对于某个阈值).
例如,我有一个包含10个功能的数据帧表,我有一个8空值的行,然后我想删除它.
我发现了一些相关的主题,但我无法找到任何有用的信息.
stackoverflow.com/questions/3473778/count-number-of-nulls-in-a-row
上面的链接中的示例对我不起作用,因为我想自动执行此预处理.我不能写列名并做相应的事情.
那么无论如何在没有使用带有scala的Apache Spark中的列名来执行此删除操作?
我有一个包含一些分类字符串列的数据集,我想用双精度类型表示它们。我使用 StringIndexer 进行此转换并且它有效,但是当我在另一个具有 NULL 值的数据集中尝试它时,它给出了java.lang.NullPointerException错误并且不起作用。
为了更好地理解这里是我的代码:
for(col <- cols){
out_name = col ++ "_"
var indexer = new StringIndexer().setInputCol(col).setOutputCol(out_name)
var indexed = indexer.fit(df).transform(df)
df = (indexed.withColumn(col, indexed(out_name))).drop(out_name)
}
Run Code Online (Sandbox Code Playgroud)
那么如何使用 StringIndexer 解决这个 NULL 数据问题呢?
或者是否有更好的解决方案将具有 NULL 值的字符串类型的分类数据转换为 double?