数据挖掘(异常检测)——线性方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据挖掘(异常检测)——线性方法相关的知识,希望对你有一定的参考价值。

参考技术A

补充内容:
一、PCA实现流程,设有 m 条 n 维数据:

S1. 将原始数据按列组成 n 行 m 列矩阵 X;
S2. 将 X 的每一行进行零均值化,即减去这一行的均值;
S3. 求出协方差矩阵 ;
S4. 求出协方差矩阵的特征值及对应的特征向量;
S5. 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前 k 行组成矩阵 P;
S6. Y=PX 即为降维到 k 维后的数据。

二、sklearn实现及参数说明

相关包 import sklearn.decomposition
常用类 import sklearn.decomposition.PCA

其中,
sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)

除了这些输入参数外,有两个PCA类的成员值得关注。第一个是explained_variance_,它代表降维后的各主成分的方差值。方差值越大,则说明越是重要的主成分。第二个是explained_variance_ratio_,它代表降维后的各主成分的方差值占总方差值的比例,这个比例越大,则越是重要的主成分。

如何向线性回归数据集添加异常值?

【中文标题】如何向线性回归数据集添加异常值?【英文标题】:How to add outliers to a Linear Regression dataset? 【发布时间】:2022-01-15 05:09:41 【问题描述】:

我正在尝试查看数据集中的异常值如何影响线性回归模型。我遇到的问题是我不完全知道如何将异常值添加到数据集,我只在网上找到了大量关于如何检测和删除它们的文章。

这是我目前的代码:

import matplotlib.pyplot as plt
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression


# Generate regression dataset
X, y = make_regression(
    n_samples=1000,
    n_features=1,
    noise=0.0,
    bias=0.0,
    random_state=42,
)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

regressor = LinearRegression()
regressor.fit(X_train, y_train)  # Training the algorithm

y_pred = regressor.predict(X_test)

print("R2 Score:", metrics.r2_score(y_test, y_pred))
print("Mean Absolute Error:", metrics.mean_absolute_error(y_test, y_pred))
print("Mean Squared Error:", metrics.mean_squared_error(y_test, y_pred))
print("Root Mean Squared Error:", np.sqrt(metrics.mean_squared_error(y_test, y_pred)))

plt.scatter(X_test, y_test)
plt.plot(X_test, y_pred, color="red", linewidth=1)
plt.show()

这是输出:

我的问题是如何将异常值添加到这个干净的数据集中,以查看异常值对生成的模型的影响?

任何帮助将不胜感激,谢谢!

【问题讨论】:

为什么不增加make_regression中的noise参数 嘿,在数据中添加噪音不会以其他方式影响它吗?我只想检查一个因素,即异常值如何影响数据。 【参考方案1】:

您可以直接向Xy 添加值。由于斜率足够大,这最终会给你带来异常值。您可以使用任何您想要的方法。

import matplotlib.pyplot as plt
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression


# Generate regression dataset
X, y = make_regression(
    n_samples=1000,
    n_features=1,
    noise=0.0,
    bias=0.0,
    random_state=42,
)

for x in range(20):
    X=np.append(X, np.random.choice(X.flatten()))
    y=np.append(y, np.random.choice(y.flatten()))

X = X.reshape(-1,1)
y = y.reshape(-1,1)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

regressor = LinearRegression()
regressor.fit(X_train, y_train)  # Training the algorithm

y_pred = regressor.predict(X_test)

print("R2 Score:", metrics.r2_score(y_test, y_pred))
print("Mean Absolute Error:", metrics.mean_absolute_error(y_test, y_pred))
print("Mean Squared Error:", metrics.mean_squared_error(y_test, y_pred))
print("Root Mean Squared Error:", np.sqrt(metrics.mean_squared_error(y_test, y_pred)))

plt.scatter(X_test, y_test)
plt.plot(X_test, y_pred, color="red", linewidth=1)
plt.show()

【讨论】:

以上是关于数据挖掘(异常检测)——线性方法的主要内容,如果未能解决你的问题,请参考以下文章

摘译 | 2017 Top 15 Python 数据科学类库;时间序列异常点检测;如何加入开源项目

异常点检测方法

异常检测方法 二

大数据科学家需要掌握的几种异常值检测方法

异常检测统计学方法

异常检测之孤立森林算法详细解释且配上代码运行实例