Python: 如何找到分隔两个不同簇的值?
Python: How to find the value that separates 2 different clusters?
我正在应用一种无监督学习算法,使用 OneClass SVM 方法构建异常检测,然后绘制它以可视化它的外观。
我有 2 个簇:一个红色和另一个蓝色。对应于 1(不是异常)的红色簇和值为 -1(异常)的蓝色簇。
我想要的是获得两个集群分离的确切值。
我的代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import preprocessing
data = pd.read_excel('gpmd.xlsx', header = 0)
X = data.loc[:, ['ContextID','BacksGas_Flow_sccm']]
min_max_scaler = preprocessing.MinMaxScaler()
X_minmax = min_max_scaler.fit_transform(X.values[:,[1]])
from sklearn.svm import OneClassSVM
ocsvm = OneClassSVM(nu = 0.05, kernel = 'rbf', gamma = 'scale')
y_ocsvm1 = ocsvm.fit_predict(X_minmax[:,[0]])
plt.scatter(X.values[y_ocsvm1 == 1, 0], X_minmax[y_ocsvm1 == 1, 0], c = 'red', label = 'cluster1')
plt.scatter(X.values[y_ocsvm1 == -1, 0], X_minmax[y_ocsvm1 == -1, 0], c = 'blue', label = 'cluster2')
plt.ticklabel_format(useOffset=False)
plt.yticks(np.arange(min(X_minmax[:,[0]]), max(X_minmax[:,[0]]), 0.03))
plt.legend()
plt.show()
我运行这段代码得到的图是:
仅从图片来看,我们可以粗略地说,红色簇与蓝色簇的分离值介于 0.72 和 0.75 之间。
我想知道是否有办法知道这两个集群分开的确切值。
编辑 1
在下图中,我们可以看到一条绿线(大致)将两个集群分开,我想找到这样一条线及其对应的 y 轴值
@Justice_lords 的建议正是我要找的。 Decision_function()
对我有用。
我正在应用一种无监督学习算法,使用 OneClass SVM 方法构建异常检测,然后绘制它以可视化它的外观。
我有 2 个簇:一个红色和另一个蓝色。对应于 1(不是异常)的红色簇和值为 -1(异常)的蓝色簇。
我想要的是获得两个集群分离的确切值。
我的代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import preprocessing
data = pd.read_excel('gpmd.xlsx', header = 0)
X = data.loc[:, ['ContextID','BacksGas_Flow_sccm']]
min_max_scaler = preprocessing.MinMaxScaler()
X_minmax = min_max_scaler.fit_transform(X.values[:,[1]])
from sklearn.svm import OneClassSVM
ocsvm = OneClassSVM(nu = 0.05, kernel = 'rbf', gamma = 'scale')
y_ocsvm1 = ocsvm.fit_predict(X_minmax[:,[0]])
plt.scatter(X.values[y_ocsvm1 == 1, 0], X_minmax[y_ocsvm1 == 1, 0], c = 'red', label = 'cluster1')
plt.scatter(X.values[y_ocsvm1 == -1, 0], X_minmax[y_ocsvm1 == -1, 0], c = 'blue', label = 'cluster2')
plt.ticklabel_format(useOffset=False)
plt.yticks(np.arange(min(X_minmax[:,[0]]), max(X_minmax[:,[0]]), 0.03))
plt.legend()
plt.show()
我运行这段代码得到的图是:
仅从图片来看,我们可以粗略地说,红色簇与蓝色簇的分离值介于 0.72 和 0.75 之间。 我想知道是否有办法知道这两个集群分开的确切值。
编辑 1
在下图中,我们可以看到一条绿线(大致)将两个集群分开,我想找到这样一条线及其对应的 y 轴值
@Justice_lords 的建议正是我要找的。 Decision_function()
对我有用。