对于二进制分类问题,我的数据集略有不平衡,正负比为0.6。我最近从以下答案中了解了auc指标:https ://stats.stackexchange.com/a/132832/128229 ,并决定使用它。
但是我碰到了另一个链接http://fastml.com/what-you-wanted-to-know-about-auc/,该链接声称AUC-ROC对类不平衡不敏感,我们应该使用AUC来提高精度召回曲线。
xgboost文档尚不清楚他们使用哪个AUC,是否使用AUC-ROC?此外,该链接还提到,仅当您不关心概率而仅关心排名时,才应使用AUC。
但是,由于我使用的是binary:logistic目标,因此我认为我应该关注概率,因为我必须为预测设置阈值。
xgboost参数调整指南https://github.com/dmlc/xgboost/blob/master/doc/how_to/param_tuning.md 还建议了一种通过不平衡正样本和负样本并使用max_delta_step = 1处理类不平衡的替代方法。 。
因此有人可以解释,什么时候AUC优先于xgboost处理类不平衡的另一种方法。如果我使用的是AUC,我需要为预测设置的阈值是多少?或更笼统地说,我应该如何使用AUC来精确处理xgboost中的不平衡二进制分类问题?
编辑:
我还需要消除误报,而不是消除误报,除了binary:logistic目标之外,如何简单地改变阈值,我如何才能做到这一点?
我正在使用thiserror箱来创建自定义错误类型
use thiserror::Error;
/// ParseTreeError enumerates all possible errors returned by this library.
#[derive(Error, Debug)]
pub enum ParseTreeError {
/// Represents an empty source. For example, an empty text file being given
/// as input to `count_words()`.
#[error("Source contains no data")]
EmptySource,
/// Represents a failure to read from input.
#[error("Read error")]
ReadError,
}
Run Code Online (Sandbox Code Playgroud)
pub struct Parser <'a, T>
where
T: FromStr + PartialEq
{
token_stream: &'a str,
marker: (usize, usize),
}
impl<'a, T> Parser<'a, T>
where
T: …Run Code Online (Sandbox Code Playgroud) 所以考虑这个片段
import polars as pl
df = pl.DataFrame({'class': ['a', 'a', 'b', 'b'], 'name': ['Ron', 'Jon', 'Don', 'Von'], 'score': [0.2, 0.5, 0.3, 0.4]})
df.groupby('class').agg([pl.col('score').max()])
Run Code Online (Sandbox Code Playgroud)
这给了我:
class score
b 0.4
a 0.5
Run Code Online (Sandbox Code Playgroud)
但我想要与最高分数相对应的组的整行。我可以与原始数据框进行连接,例如
sdf = df.groupby('class').agg([pl.col('score').max()])
sdf.join(df, on=['class', 'score'])
Run Code Online (Sandbox Code Playgroud)
要得到
class score name
a 0.5 Jon
b 0.4 Von
Run Code Online (Sandbox Code Playgroud)
有没有办法避免连接并将名称列包含在 groupby 聚合中?
任何人都可以建议一种快速的方法来获得向量中每个元素的等级.我不需要对向量进行排序,但只有在向量排序时才获取每个元素的索引
例如:{40,20,10,30}应该给{3,1,0,2}
我是否能够获得加速,因为我实际上不必对数据进行排序?
考虑一个简化的数据集(真正的数据集有更多的列和行):
df
tp tf weight
1 FWD RF 78.86166
2 MF LF 81.04566
3 DEF LF 80.70527
4 DEF LF 82.96071
5 DEF RF 78.42544
6 GK LF 79.37686
7 DEF RF 78.79928
8 MF RF NA
9 MF RF 78.93815
10 DEF RF 80.00284
Run Code Online (Sandbox Code Playgroud)
我想用tp和tf组合的分组中位数来填充重量中的缺失值
我到现在为止尝试的是以下(我使用过dlpyr)
temp <- df %>% group_by(tp,tf) %>% summarise(mvalue = median(weight,na. rm = TRUE))
Run Code Online (Sandbox Code Playgroud)
这给了温度:
temp
Source: local data frame [6 x 3]
Groups: tp [?]
tp tf mvalue
<fctr> <fctr> <dbl>
1 …Run Code Online (Sandbox Code Playgroud) import polars as pl
df = pl.DataFrame({'a': [[1, 2, 3], [8, 9, 4]], 'b': [[2, 3, 4], [4, 5, 6]]})
Run Code Online (Sandbox Code Playgroud)
所以给定数据框 df
a b
[1, 2, 3] [2, 3, 4]
[8, 9, 4] [4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
我想要一个c列,它是a和b的交集
a b c
[1, 2, 3] [2, 3, 4] [2, 3]
[8, 9, 4] [4, 5, 6] [4]
Run Code Online (Sandbox Code Playgroud)
我知道我可以将 apply 函数与 python 集交集一起使用,但我想使用极坐标表达式来实现。
我有:
val rdd1: RDD[myClass]
Run Code Online (Sandbox Code Playgroud)
它已经初始化,我检查时调试所有成员都有他们的默认值
如果我做
rdd1.foreach(x=>x.modifier())
Run Code Online (Sandbox Code Playgroud)
其中modifier是myClass的成员函数,它修改了一些成员变量
执行此操作后,如果我检查RDD内的值,则它们尚未被修改.
有人能解释一下这里发生了什么吗?是否可以确保在RDD内部修改值?
编辑:
class myClass(var id:String,var sessions: Buffer[Long],var avgsession: Long) {
def calcAvg(){
// calculate avg by summing over sessions and dividing by legnth
// Store this average in avgsession
}
}
Run Code Online (Sandbox Code Playgroud)
如果我这样做,avgsession属性不会更新
myrdd.foreach(x=>x.calcAvg())
Run Code Online (Sandbox Code Playgroud) 我正在尝试在 kaggle https://www.kaggle.com/c/titanic 中进行泰坦尼克号生存挑战。
我在 R 方面没有经验,所以我将 Python 和 Scikit Learn 用于随机森林分类器
我看到很多人使用 scikit 学习将他们的多个级别的分类转换为虚拟变量。
我不明白这样做的意义,为什么我们不能将级别映射到一个数值并完成它。
我还看到有人做了以下事情:有一个具有三个级别的分类特征Pclass,他为此创建了 3 个虚拟变量,并删除了存活率最低的变量。我也无法理解这一点,虽然决策树不关心相关特征。
我在scala中有一个类定义
class A(p1: Type1,p2: Type2){
def this(p1: Type1){ //my constructor
this()
this.p1 = somevalue
}
}
Run Code Online (Sandbox Code Playgroud)
有什么区别
1. val a:A = new A //Is this same as A()??
2. val a:A = new A(v1,v2)
Run Code Online (Sandbox Code Playgroud)
怎么来1.给出编译时错误?但在"我的构造函数"中调用this()不会产生错误.
我在Windows系统中安装了TortoiseSVN 1.8。我似乎无法使用Intellij Idea 14.14从存储库中签出
我配置了Intellij idea的设置,以正确给出svn.exe位置的路径
但是在结帐时显示:
无法从svn检出:无法将'C:\ Program'识别为内部或外部命令,可操作程序或批处理文件。
我还有其他东西吗?
我有一个
HashMap<String,Integer> map
Run Code Online (Sandbox Code Playgroud)
我希望按值按降序排序:
HashMap<String,Integer> topSorted = new HashMap<>();
//sort map in descending order
Stream<HashMap.Entry<String,Integer>> st = map.entrySet().stream();
st.sorted(Comparator.comparing((HashMap.Entry<String,Integer> e) -> e.getValue()).reversed())
.forEach(e -> topSorted.put(e.getKey(),e.getValue()));
Run Code Online (Sandbox Code Playgroud)
但topsorted仍然与地图相同,根本没有进行排序
有人可以解释我做错了什么
这是一个包含向量的玩具结构
struct SizedVec {
items: Vec<u32>,
cap: usize,
}
Run Code Online (Sandbox Code Playgroud)
我想拥有迭代函数,SizedVec这样它们就可以像我直接迭代项目一样工作。
但是,我不知道我应该实现哪些性状:是Iterator和IntoIterator就够了吗?文档中有很多特征
,它们看起来有点复杂和乏味。
然后我看到我可以使用 deref coercion 免费实现Deref和DerefMut获取所有这些功能:
果然,做完之后:
impl Deref for SizedVec {
type Target = Vec<u32>;
fn deref(&self) -> &Self::Target {
&self.items
}
}
impl DerefMut for SizedVec {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.items
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用我想要的所有迭代器。但是我想实现一个自定义的推送逻辑,但是DeRef已经给了我一个推送。但是根据文档我应该没问题,因为显然查找是按顺序为每种类型完成的
impl SizedVec {
fn from_size(size: usize) -> Self {
Self {
items: vec![],
cap: size, …Run Code Online (Sandbox Code Playgroud)