對樣本、特徵的管理,在真實場景中尤其重要。對於生產出來的一條資料,首先對其進行正負類別判斷,轉化成了樣本。樣本裡面的原始字段需要清洗、整合,才能得到特徵。
樣本表結構:
生產時間,使用者id,文件id,類別
特徵表結構(使用者側特徵和文件側特徵混合存在一張表裡頭):
生產時間,使用者id,使用者側特徵名,特徵具體內容
生產時間,文件id,文件側特徵名,特徵具體內容
拼接方案(確定每條樣本由哪些特徵組成,涉及到具體拼接):
# log_df: ftime, user_id, doc_id, label
# feature_df: ftime, owner, feature_name, feature_content
#需要使用到的特徵
feature_list = [...]
#使用者側特徵擴充套件
user_df = log_df.join(feature_df, (log_df["ftime"]==feature_df["ftime"])
& (log_df["user_id"]==feature_df["owner"]))
user_df = user_df.filter(user_df["feature_name"] in feature_list)
#文字側特徵擴充套件
doc_df = log_df.join(feature_df, (log_df["ftime"]==feature_df["ftime"])
& (log_df["doc_id"]==feature_df["owner"]))
doc_df = doc_df.filter(doc_df["feature_name"].isin(feature_list)==true)
#使用者特徵與文字特徵匯合
sample_df = user_df.join(doc_df, (user_df["user_id"]==doc_df["user_id"])
&(user_df["doc_id"]==doc_df["doc_id"])
&(user_df["ftime"] == doc_df["ftime"]))
sample_df = sample_df.withcolumn("concat_feature",
concat_ws("##", sample_df["feature_name"], sample_df["feature_content"]))
sample_df = sample_df.groupby("ftime", "user_id","doc_id", "label").
agg(collect_list('concat_feature').alias("feature_list")) #此時sample_df只有"ftime", "user_id","doc_id", "label"和"feature_list"
#特徵按順序排列好
def arrange_feature_func(feature_list):
pass
arrange_feature_udf = udf(arrange_feature_func, stringtype())
sample_df = sample_df.withcolumn("whole_feature",
arrange_feature_udf(sample_df["feature_list"]))
特徵就是樣本
平時的工作就是提特徵進行模式識別,在看到pca時,有點不明白,就是求特徵空間的方法沒有看明白,後來查相關資料才弄明白,原來特徵就是樣本,這樣模式識別就與概率統計學連線起來了。提取特徵時,一般會把乙個特徵reshape為向量,然後並列排在一起放在矩陣中,這時候,每列是乙個樣本,而每行就是一維,行數就是...
Wannacry樣本取證特徵與清除
母體檔案 mssecsvc.exe c windows tasksche.exe c windows qeriuwjhrfcpu佔用率100 windows xp sp3 kb4012598 windows xp x64 sp2 kb4012598 windows 2003 sp2 kb401259...
樣本打散後計算單特徵 NDCG
能計算模型的 ndcg,也就能計算單特徵的 ndcg,用於評估單特徵的有效性,跟 group auc 用途一樣 如果是 auc,越大於或小於 0.5,特徵越有效,但 ndcg 沒有這個特點,ndcg 都是正的,而且,樣本正負比例不同,ndcg 的值也不同,變化很大。那麼在同樣的樣本下,就需要有個基準...