求 y_test 和 y_pred 的相关性
时间: 2024-06-04 14:13:53 浏览: 216
可以使用Pearson相关系数来衡量y_test和y_pred的相关性,计算公式如下:
r = cov(y_test, y_pred) / (std(y_test) * std(y_pred))
其中,cov表示协方差,std表示标准差。Pearson相关系数r的取值范围为[-1, 1],当r越接近1时,表示y_test和y_pred的相关性越强;当r越接近-1时,表示y_test和y_pred的负相关性越强;当r趋近于0,表示y_test和y_pred之间没有线性相关性。
相关问题
在机器学习有多维目标变量时候pcc = pearsonr(y_test, y_pred, axis=0)[0]这种表达是错误的,请帮我更正
在机器学习中,当有多维目标变量时,我们不能直接使用Pearson相关系数来衡量预测值和真实值之间的线性相关性。Pearson相关系数是用于衡量两个一维变量之间的线性相关性,因此无法直接应用于多维目标变量。
在处理多维目标变量时,我们可以使用其他指标来评估预测值和真实值之间的相关性,例如多维的R平方(R-squared)或均方根误差(Root Mean Squared Error,RMSE)。这些指标可以提供更全面的评估,反映出预测的准确性和拟合程度。
因此,如果你想评估多维目标变量的预测效果,建议使用适当的指标,而不是使用错误的表达式 pearsonr(y_test, y_pred, axis=0)[0]。
import seaborn as sns import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression df = pd.read_csv('heart.csv') corrmat = df.corr() top_corr_features = corrmat.index plt.figure(figsize=(16,16)) sns.heatmap(df[top_corr_features].corr(),annot=True,cmap="RdYlGn") plt.show() sns.set_style('whitegrid') sns.countplot(x='target',data=df,palette='RdBu_r') plt.show() dataset = pd.get_dummies(df, columns=['sex', 'cp', 'fbs', 'restecg', 'exang', 'slope', 'ca', 'thal']) columns_to_scale = ['age', 'trestbps', 'chol', 'thalach', 'oldpeak'] scaler = StandardScaler() dataset[columns_to_scale] = scaler.fit_transform(dataset[columns_to_scale]) dataset.head() y = dataset['target'] X = dataset.drop(['target'], axis=1) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) logreg = LogisticRegression() logreg.fit(X_train, y_train) print("Training accuracy: {:.3f}".format(logreg.score(X_train, y_train))) print("Test accuracy: {:.3f}".format(logreg.score(X_test, y_test)))改写为ROC代码
以下是将 Logistic Regression 模型的评估指标改为 ROC 曲线的代码:
```python
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, auc
df = pd.read_csv('heart.csv')
# 查看特征相关性
corrmat = df.corr()
top_corr_features = corrmat.index
plt.figure(figsize=(16,16))
sns.heatmap(df[top_corr_features].corr(),annot=True,cmap="RdYlGn")
plt.show()
# 查看数据分布
sns.set_style('whitegrid')
sns.countplot(x='target',data=df,palette='RdBu_r')
plt.show()
# 对数据进行 One-hot 编码和标准化
dataset = pd.get_dummies(df, columns=['sex', 'cp', 'fbs', 'restecg', 'exang', 'slope', 'ca', 'thal'])
columns_to_scale = ['age', 'trestbps', 'chol', 'thalach', 'oldpeak']
scaler = StandardScaler()
dataset[columns_to_scale] = scaler.fit_transform(dataset[columns_to_scale])
dataset.head()
# 划分数据集
y = dataset['target']
X = dataset.drop(['target'], axis=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
# 训练模型
logreg = LogisticRegression()
logreg.fit(X_train, y_train)
# 评估模型
y_train_pred = logreg.predict_proba(X_train)[:, 1]
y_test_pred = logreg.predict_proba(X_test)[:, 1]
fpr_train, tpr_train, thresholds_train = roc_curve(y_train, y_train_pred)
fpr_test, tpr_test, thresholds_test = roc_curve(y_test, y_test_pred)
roc_auc_train = auc(fpr_train, tpr_train)
roc_auc_test = auc(fpr_test, tpr_test)
# 绘制 ROC 曲线
plt.figure()
plt.plot(fpr_train, tpr_train, color='darkorange', lw=2, label='Train ROC curve (area = %0.2f)' % roc_auc_train)
plt.plot(fpr_test, tpr_test, color='navy', lw=2, label='Test ROC curve (area = %0.2f)' % roc_auc_test)
plt.plot([0, 1], [0, 1], color='black', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic')
plt.legend(loc="lower right")
plt.show()
```
在这个代码中,我们使用 `roc_curve` 函数计算训练集和测试集的 FPR 和 TPR,然后使用 `auc` 函数计算 ROC 曲线下的面积。最后,我们使用 `matplotlib` 库绘制 ROC 曲线。
阅读全文