Python 有没有办法为二元分类特征数据绘制散点图?

Python 有没有办法为二元分类特征数据绘制散点图?,python,matplotlib,classification,Python,Matplotlib,Classification,我想用二进制变量列为提取的特征建立一个决策边界,并绘制一个图来区分两个类。我尝试使用逻辑回归来确定决策边界,但在渲染图中,属于两类的数据点没有很好地分开。当我试图用支持向量机绘制散点图或决策边界时,我有一个记忆错误 当我做SVM时,有没有什么方法可以取样做散点图?如何获得二元分类的正确决策边界?有什么想法吗 数据: from sklearn.model_selection import train_test_split from sklearn.linear_model import Logis

我想用二进制变量列为提取的特征建立一个决策边界,并绘制一个图来区分两个类。我尝试使用逻辑回归来确定决策边界,但在渲染图中,属于两类的数据点没有很好地分开。当我试图用支持向量机绘制散点图或决策边界时,我有一个记忆错误

当我做SVM时,有没有什么方法可以取样做散点图?如何获得二元分类的正确决策边界?有什么想法吗

数据

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import pandas as pd

##  load features
df=pd.read_csv('binary_clf_feats.csv')
X_feats=df.iloc[:, 2:11,].values
y_label=df['price_status'].values
seed=np.random.seed(234)
X_train, X_test, y_train, y_test = train_test_split(X_feats, y_label, test_size = 0.2, random_state = seed)

log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)
parameters = log_reg.coef_[0]
parameter0 = log_reg.intercept_

# Plotting the decision boundary
fig = plt.figure(figsize=(10,7))
x_values = [np.min(X_train[:,] -50 ), np.max(X_train[:,] +50 )]
y_values = np.dot((-1./parameters[1]), (np.dot(parameters[0],x_values) + parameter0))
colors=['red' if l==0 else 'blue' for l in y_train]
plt.scatter(X_train[:, 0], X_train[:, 1], label='Logistics regression', color=colors)
plt.plot(x_values, y_values, label='Decision Boundary')
plt.show()
我有265x16列dataframe的功能,可以在上面看到

我所尝试的

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import pandas as pd

##  load features
df=pd.read_csv('binary_clf_feats.csv')
X_feats=df.iloc[:, 2:11,].values
y_label=df['price_status'].values
seed=np.random.seed(234)
X_train, X_test, y_train, y_test = train_test_split(X_feats, y_label, test_size = 0.2, random_state = seed)

log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)
parameters = log_reg.coef_[0]
parameter0 = log_reg.intercept_

# Plotting the decision boundary
fig = plt.figure(figsize=(10,7))
x_values = [np.min(X_train[:,] -50 ), np.max(X_train[:,] +50 )]
y_values = np.dot((-1./parameters[1]), (np.dot(parameters[0],x_values) + parameter0))
colors=['red' if l==0 else 'blue' for l in y_train]
plt.scatter(X_train[:, 0], X_train[:, 1], label='Logistics regression', color=colors)
plt.plot(x_values, y_values, label='Decision Boundary')
plt.show()
但这种方法给了我以下的情节:


我希望蓝色和红色的数据点应该很好地分开。如何操作特征数据以获得正确的散点图或SVM图?有没有更好的办法来实现这一点?感谢查看您的数据集,您有两个以上的功能。通常,二维打印不可能超过2个特征/无标准做法。你需要问问自己,如果可能的话,你到底在想象什么

尽量不要把重点放在绘图上,而是先提高模型的精度。一些改进: -标度值 -仓位值 -合并功能/删除功能 -生成新功能
-尝试其他模型:从决策树可以很容易地解释什么特性导致什么决策

查看您的数据集,您有两个以上的特性。通常,二维打印不可能超过2个特征/无标准做法。你需要问问自己,如果可能的话,你到底在想象什么

尽量不要把重点放在绘图上,而是先提高模型的精度。一些改进: -标度值 -仓位值 -合并功能/删除功能 -生成新功能
-尝试其他模型:从决策树可以很容易地解释什么特性导致什么决策

这是一个很好的答案,我只想补充一点:如果绘图很重要,您可以使用诸如PCA或t-SNE之类的降维技术将特征空间降到精度较低但更直观的程度space@G.Anderson我不接受上面的答案,对我来说,获得绘图很重要,但我不知道如何使用PCA或t-SNE获得相应的绘图。你有什么具体的解决办法而不是口头回答吗?thanks@tvgriek如果编码解决方案可行,你能详细说明你的答案吗?我的意思是,我想为每个社区区域做一块地皮,无论价格是下降(0)还是上升。你能提供一个简洁的绘图解决方案吗?感谢幸运的是,我没有时间来创建一个完整的答案,但是这些技术的sklearn页面非常好,还有@G.Anderson的建议,你可以研究一下。请记住,即使你这样做,也不清楚你在想象什么。如果你想绘制价格下降与社区面积的对比图,看看这是一个很好的答案,我只想补充一点:如果绘制很重要,你可以使用降维技术,如PCA或t-SNE,将特征空间缩小到精度较低但更具可视性的水平space@G.Anderson我不接受上述答案,,对我来说,获得绘图很重要,但我不知道如何使用PCA或t-SNE获得相应的绘图。你有什么具体的解决办法而不是口头回答吗?thanks@tvgriek如果编码解决方案可行,你能详细说明你的答案吗?我的意思是,我想为每个社区区域做一块地皮,无论价格是下降(0)还是上升。你能提供一个简洁的绘图解决方案吗?感谢幸运的是,我没有时间来创建一个完整的答案,但是这些技术的sklearn页面非常好,还有@G.Anderson的建议,你可以研究一下。请记住,即使你这样做,也不清楚你在想象什么。如果你想绘制价格下降与社区面积的对比图,请查看