python - Scikit-Learn LinearRegression 在非常简单的数据集上表现不佳,

标签 python machine-learning scikit-learn linear-regression

当我尝试使用 scikit-learn LinearRegression 时,模型表现不佳,但是,当我尝试 scipy 线性回归时,它运行良好, 数据集很简单,逻辑或者代码有缺陷吗?

我尝试了多个 self 生成的线性数据,所有这些数据都包含 1 列特征和 1 列标签。

导入库

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from scipy import stats

生成数据

X=[]
Y=[]
for i in range (100):
    X.append(2*i+3)
    Y.append(1.8*X[i]+32)
X=np.array(X,dtype=float)
Y=np.array(Y,dtype=float)

创建模型并分为测试和训练

reg = LinearRegression()
X_train, Y_train, X_test, Y_test = train_test_split(X, Y, test_size=0.5, random_state=0)

reshape 测试和训练,因为它是单列功能

X_train,X_test=(X_train.reshape(-1,1),X_test.reshape(-1,1))

拟合训练数据并对其进行评分

reg.fit(X_train,Y_train)
reg.score(X_test,Y_test)

我得到的分数因数据集大小而异,但从来都不好,大多是负面的,

但是当我使用 scipy 模型时

slope, intercept, r_value, p_value, std_err = stats.linregress(X, Y)

它工作得很好,总是能找到斜率 1.8 和截距 32

最佳答案

train_test_split 返回按照您输入参数的顺序拆分的数据,因此首先返回 X,然后返回 Y。但是您混合了 X 和 Y。

如果你这样做,你的问题就会得到解决:

X_train, X_test, Y_train, Y_test = train_test_split(X,Y,test_size=0.5,random_state=0)

Scipy 可以工作,因为您使用了整个数据集。

关于python - Scikit-Learn LinearRegression 在非常简单的数据集上表现不佳,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57779749/

相关文章:

python - pyspark Dataframe API cast ('timestamp' ) 不适用于时间戳字符串

python - 如何搜索段落中的对象

algorithm - 评估基于项目的协同过滤对二元(是/否)产品推荐的性能

python - 如何使用 sklearn 的 CountVectorizer and() 获取包含任何标点符号的 n 克作为单独的标记?

python - django-avatar 的数据库错误

python - 根据输入值进行计数 - 不同 "variables"?

python - Relu 性能比 sigmoid 差?

python - 为什么我无法从 matplotlib.colors 导入 ListedColorMap?

machine-learning - 所有机器学习算法都使用词频作为特征吗?

Python:当我导入 RandomForestClassifier 时出现 "TypeError: Could not operate with block values"