from sklearn.cluster import SpectralClustering
[docs]class NaivlyCalibratedSpectralClustering(SpectralClustering):
name = "spc"
[docs] def fit(self, X, y):
super().fit(X, y)
df = self.decision_function(X)
self.df_min_ = df.min()
self.df_max_ = df.max()
[docs] def predict_proba(self, X):
"""Min-max scale output of `decision_function` to [0,1]."""
df = self.decision_function(X)
calibrated_df = (df - self.df_min_) / (self.df_max_ - self.df_min_)
proba_pos_class = np.clip(calibrated_df, 0, 1)
proba_neg_class = 1 - proba_pos_class
proba = np.c_[proba_neg_class, proba_pos_class]
return proba
SpectralClusteringClassifier = NaivlyCalibratedSpectralClustering(
n_clusters=3,
eigen_tol=1e-7,
assign_labels="kmeans",
random_state=42,
)