超级流氓霸道行为的 SGNews.exe SohuNews.exe “今日热点” 弹窗

博客详述了一位用户与搜狗输入法捆绑的广告软件SGNews.exe的斗争过程,该软件具有极强的自我修复能力,即便删除、锁定或权限控制都无法阻止其反复出现。

最近总是在桌面上弹出一个标题为“今日热点”的弹窗,特别的讨厌。如下图。

经常弹出到画面正中间,挺讨人嫌。经过查看任务管理器的进程,正是一个叫 SGNews.exe的进程(有时候是SohuNews.exe),定位其目录在于

C:\Program Files (x86)\SogouInput\9.3.0.3129\ 

这个里面。没错,正是搜狗输入法的安装目录。发现有这么个文件。于是,采取了一个方法

① 把这个文件删掉,希望它不再会出现。

结果呢,第二天开电脑,继续卷土重来了。继续弹窗,一看我去,SGNews.exe这个文件又回来了,竟然还有自我修复能力!厉害了我的哥!

②尝试破坏掉文件,导致其无法运行,并设置文件属性为“只读”。

结果呢,失败,再次被修复和替换,只读也对它无效。

③尝试使用系统权限来控制,删除所有的权限,使其成为“顽固”文件。

最后的结果是,无论是删除所有的权限,还是说对所有的用户,甚至包括System账号,所有权限都是“拒绝”,即使这样依然被这流氓软件给改了回来!文件再次卷土重来!多么强大的修复能力!

④最后的最后,采用第三方“锁定”文件的工具,来锁定这个顽固的SGNews.exe,使其无法运行也无法删除。

心想这样子总行了吧?没招了吧?

然后结果怎么样呢???我去,道高一尺,魔高一丈。简直了。

删不掉,修复不了就不删了呗。

第二天电脑开机,依然很“顺利弹出”。

这次查看一下进程,变成了 sgfrontpage.exe

简直6的飞起。

再次对这个文件进行锁定。

第三天,又变成了 sgiln.exe

然后再次对这个文件锁定,

第四天,又变成了 exzsgfatxwzxpj.exe

简直是,我只能说这流氓的程度我着实佩服它。

要么,你就卸载它,要么,咳咳,看着办吧。

这个错误是因为你传入的测试集和训练集划分参数导致**训练集为空**,常见于测试集比例 (`test_size`) 设置过高,但数据太少。 --- ## 🔍 错误分析 错误信息: ``` ValueError: With n_samples=1, test_size=0.2 and train_size=None, the resulting train set will be empty. ``` 意思是: - 你传入了 **1 个样本**; - 设置了 `test_size=0.2`,即留出 20% 的数据作为测试集; - 那么剩下的 80%(也就是 0 个样本)作为训练集; - 导致训练集为空,无法训练模型。 --- ## ✅ 解决方案 你有以下几种选择来解决这个问题: --- ### ✅ 方法 1:减少 `test_size`(推荐) 将 `test_size` 改小,比如设为 0.1: ```python X_train, X_test, y_train, y_test = train_test_split( tagged_sentences, labels, test_size=0.1, random_state=42, stratify=labels ) ``` --- ### ✅ 方法 2:使用 `train_size` 明确指定训练集大小 ```python X_train, X_test, y_train, y_test = train_test_split( tagged_sentences, labels, train_size=1, random_state=42, stratify=labels ) ``` - 这样训练集保留 1 个样本,测试集自动为 0 个样本; - 但**不能评估模型表现**,适合仅训练不测试的场景。 --- ### ✅ 方法 3:使用 `KFold` 或 `StratifiedKFold` 做交叉验证(更推荐) 当数据非常少时,使用交叉验证更合理: ```python from sklearn.model_selection import StratifiedKFold skf = StratifiedKFold(n_splits=2) for train_index, test_index in skf.split(sentences, labels): X_train, X_test = [sentences[i] for i in train_index], [sentences[i] for i in test_index] y_train, y_test = [labels[i] for i in train_index], [labels[i] for i in test_index] # 获取向量 X_train_vec = get_vectors(model, X_train) X_test_vec = get_vectors(model, X_test) # 训练模型 clf = LogisticRegression() clf.fit(X_train_vec, y_train) # 评估 y_pred = clf.predict(X_test_vec) print("准确率:", accuracy_score(y_test, y_pred)) ``` --- ### ✅ 方法 4:增加数据量(根本解决) 如果你只有 1 条数据,建议: - 手动添加更多语料; - 使用数据增强(如同义词替换、回译等); - 使用公开数据集如 THUCNews、SoHuNews 等。 --- ## ✅ 总结:如何选择参数? | 场景 | 推荐做法 | |------|-----------| | 数据量极少(< 10) | 使用交叉验证(如 `StratifiedKFold`) | | 数据量中等(10~100) | `test_size=0.1 ~ 0.2`,确保训练集不为空 | | 数据量充足(> 100) | `test_size=0.2`,验证更可靠 | | 仅训练无测试 | `train_size=全部` | | 需要复现实验结果 | 固定 `random_state` | --- ##
当然可以!下面是你原始代码的**增强版**,加入了: - 分类报告(precision, recall, f1-score) - 混淆矩阵 - 更清晰的日志输出 - 更合理的训练数据划分方式 - 更好的可读性和结构 --- ## ✅ 修改后的完整代码(增强评估能力) ```python from gensim.models.doc2vec import Doc2Vec, TaggedDocument from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, classification_report, confusion_matrix # 加载模型 model = Doc2Vec.load("doc2vec.model") # 示例数据(0 表示科技类,1 表示体育类) sentences = [ ["我", "喜欢", "人工智能"], ["这场", "比赛", "很", "精彩"], ["机器学习", "很", "有趣"], ["篮球", "是我", "的", "最爱"], ["深度学习", "改变", "世界"], ["我喜欢", "打篮球"], ] labels = [0, 1, 0, 1, 0, 1] # 构建 TaggedDocument tagged_sentences = [TaggedDocument(words=s, tags=[str(i)]) for i, s in enumerate(sentences)] # 获取向量表示 def get_vectors(model, tagged_sentences): vectors = [] for doc in tagged_sentences: vec = model.infer_vector(doc.words) vectors.append(vec) return vectors # 划分训练集和测试集(80% 训练,20% 测试) X_train, X_test, y_train, y_test = train_test_split( tagged_sentences, labels, test_size=0.2, random_state=42, stratify=labels ) # 获取向量表示 X_train_vec = get_vectors(model, X_train) X_test_vec = get_vectors(model, X_test) # 训练分类器 clf = LogisticRegression() clf.fit(X_train_vec, y_train) # 预测 y_pred = clf.predict(X_test_vec) # 评估 accuracy = accuracy_score(y_test, y_pred) print("✅ 分类准确率:", accuracy) print("\n📋 分类报告:") print(classification_report(y_test, y_pred, target_names=["科技类 (0)", "体育类 (1)"])) print("\n🧮 混淆矩阵:") print(confusion_matrix(y_test, y_pred)) ``` --- ## ✅ 输出示例(假设测试集有两个样本) ``` ✅ 分类准确率: 1.0 📋 分类报告: precision recall f1-score support 科技类 (0) 1.00 1.00 1.00 1 体育类 (1) 1.00 1.00 1.00 1 accuracy 1.00 2 macro avg 1.00 1.00 1.00 2 weighted avg 1.00 1.00 1.00 2 🧮 混淆矩阵: [[1 0] [0 1]] ``` --- ## ✅ 修改说明 | 修改点 | 说明 | |--------|------| | `stratify=labels` | 保证训练集和测试集中类别分布一致 | | `target_names` 参数 | 使分类报告更易读 | | 增加分类报告和混淆矩阵 | 更全面地评估模型表现 | | 使用更清晰的输出格式 | 如 `✅`、`📋`、`🧮` 提高可读性 | | 函数封装清晰 | `get_vectors` 保持逻辑清晰 | --- ## ✅ 建议后续改进 1. **使用更多数据**:6 条数据太少,建议扩展到 100 条以上; 2. **使用真实数据集**:如 THUCNews、SoHuNews; 3. **尝试其他分类器**:SVM、随机森林、XGBoost; 4. **可视化向量分布**:使用 t-SNE 或 PCA 查看向量空间分布; 5. **保存分类器模型**:便于后续部署或复用。 --- ##
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值