I have a dataset (data frame) with 5 columns all containing numeric values.
I'm looking to run a simple linear regression for each pair in the dataset.
For example, If the columns were named A, B, C, D, E, I want to run lm(A~B), lm(A~C), lm(A~D), ...., lm(D~E),... and, then I want to plot the data for each pair along with the regression line.
我对R很陌生,所以我在如何实现这一目标的过程中如何旋转.我应该用ddply吗?还是lapply?我真的不确定如何解决这个问题.
我使用sklearn.linear_model.LinearRegression进行了多元回归并获得了回归系数:
import numpy as np
from sklearn import linear_model
clf = linear_model.LinearRegression()
TST = np.vstack([x1,x2,x3,x4])
TST = TST.transpose()
clf.fit (TST,y)
clf.coef_
Run Code Online (Sandbox Code Playgroud)
现在,我需要这些相同系数的标准误差.我怎样才能做到这一点?非常感谢.
我想使用多个预测变量来预测多个因变量.如果我理解正确,原则上可以制作一组线性回归模型,每个模型预测一个因变量,但如果因变量是相关的,那么使用多元回归更有意义.我想做后者,但我不确定如何.
到目前为止,我还没有找到专门支持此功能的Python包.我尝试过scikit-learn,尽管他们的线性回归模型示例仅显示y是一个数组(每个观察一个因变量)的情况,但它似乎能够处理多个y.但是,当我将这种"多变量"方法的输出与我通过手动循环每个因变量并相互独立地预测它们得到的结果进行比较时,结果完全相同.我不认为应该是这种情况,因为一些因变量(> 0.5)之间存在很强的相关性.
代码只是看起来像这样,与y任一个n x 1矩阵或n x m矩阵,并且x和newx各种尺寸的矩阵(行数中x == n).
ols = linear_model.LinearRegression()
ols.fit(x,y)
ols.predict(newx)
Run Code Online (Sandbox Code Playgroud)
此功能是否实际执行多元回归?
python machine-learning linear-regression multivariate-testing scikit-learn
我试过这个但是无法让它对我的数据起作用: 使用Scikit Learn对时间序列pandas数据框进行线性回归
我的数据包含2个DataFrame.DataFrame_1.shape = (40,5000)和DataFrame_2.shape = (40,74).我正在尝试进行某种类型的线性回归,但DataFrame_2包含NaN缺少的数据值.当我DataFrame_2.dropna(how="any")的形状下降到(2,74).
sklearn中是否有可以处理NaN值的线性回归算法?
我是load_boston从sklearn.datasets哪里开始建模的X,y = boston.data, boston.target = (506,13),(506,)
这是我的简化代码:
X = DataFrame_1
for col in DataFrame_2.columns:
y = DataFrame_2[col]
model = LinearRegression()
model.fit(X,y)
#ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
Run Code Online (Sandbox Code Playgroud)
我做了上面的格式来获得与矩阵匹配的形状
如果发布有DataFrame_2帮助,请在下面评论,我会添加它.
python machine-learning linear-regression pandas scikit-learn
如果True在任何线性模型中将标准化参数设置为sklearn.linear_model,则在评分步骤期间应用标准化吗?
例如:
from sklearn import linear_model
from sklearn.datasets import load_boston
a = load_boston()
l = linear_model.ElasticNet(normalize=False)
l.fit(a["data"][:400], a["target"][:400])
print l.score(a["data"][400:], a["target"][400:])
# 0.24192774524694727
l = linear_model.ElasticNet(normalize=True)
l.fit(a["data"][:400], a["target"][:400])
print l.score(a["data"][400:], a["target"][400:])
# -2.6177006348389167
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们在设置时看到预测功率的下降normalize=True,并且我无法判断这是否仅仅是score未应用归一化的函数的伪像,或者归一化值是否导致model性能下降.
我想要模型的公式以便在其他语言/项目中使用它。有没有办法从模型中导出公式?
我将使用sklearn 线性回归模型。
我最终想要做的是:给定一个公式 f() 和数据集“d”,我将拥有 Java 脚本代码,该代码将基于 f() 为我提供对 d 的预测。
假设我想使用闭合形式解决方案计算TensorFlow中的最小二乘系数.通常,我会这样做,
beta_hat = tf.matmul(
tf.matmul(tf.matrix_inverse(tf.matmul(tf.transpose(X), X)), tf.transpose(X)), y
)
Run Code Online (Sandbox Code Playgroud)
其中X和y分别对应于所述协变量和目标变量,TensorFlow占位符.
如果我想进行预测,我会做类似的事情,
y_pred = tf.matmul(X, beta_hat)
Run Code Online (Sandbox Code Playgroud)
如果我要执行,
sess.run(y_pred, feed_dict={X: data_X})
Run Code Online (Sandbox Code Playgroud)
我当然会得到一个错误,我没有为占位符提供必要的值y.我想beta_hat在计算它之后可以灵活地将其视为常量(这样我就不需要为新的协变量矩阵定义一个新的占位符来进行预测).实现这一目标的一种方法是,
# Make it constant.
beta_hat = sess.run(beta_hat, feed_dict={X: data_X, y: data_y})
y_pred = tf.matmul(X, beta_hat)
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更优雅的方法将张量处理为常量,这样我既不需要执行会话也不需要获取常量,也不需要为输入数据创建单独的占位符来用于预测.
以下是一些示例代码,用于演示我正在描述的情况.
import numpy as np
import tensorflow as tf
n, k = 100, 5
X = tf.placeholder(dtype=tf.float32, shape=[None, k])
y = tf.placeholder(dtype=tf.float32, shape=[None, 1])
beta = np.random.normal(size=(k, ))
data_X = np.random.normal(size=(n, k))
data_y = data_X.dot(beta)
data_y …Run Code Online (Sandbox Code Playgroud) 我正在尝试训练一个非常简单的线性回归模型。
我的代码是:
from scipy import stats
xs = [[ 0, 1, 153]
[ 1, 2, 0]
[ 2, 3, 125]
[ 3, 1, 93]
[ 2, 24, 5851]
[ 3, 1, 524]
[ 4, 1, 0]
[ 2, 3, 0]
[ 2, 1, 0]
[ 5, 1, 0]]
ys = [1, 1, 1, 1, 1, 0, 1, 1, 0, 1]
slope, intercept, r_value, p_value, std_err = stats.linregress(xs, ys)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/scipy/stats/stats.py", line 3100, in linregress
ssxm, ssxym, ssyxm, ssym = …Run Code Online (Sandbox Code Playgroud) 在岭回归中,我们正在Ax=b通过L2正则化来解决.直接计算如下:
x =(A T A + alpha*I)-1 A T b
我查看了scikit-learn代码,他们确实实现了相同的计算.但是,我似乎无法得到相同的结果alpha > 0
重现这个的最小代码.
import numpy as np
A = np.asmatrix(np.c_[np.ones((10,1)),np.random.rand(10,3)])
b = np.asmatrix(np.random.rand(10,1))
I = np.identity(A.shape[1])
alpha = 1
x = np.linalg.inv(A.T*A + alpha * I)*A.T*b
print(x.T)
>>> [[ 0.37371021 0.19558433 0.06065241 0.17030177]]
from sklearn.linear_model import Ridge
model = Ridge(alpha = alpha).fit(A[:,1:],b)
print(np.c_[model.intercept_, model.coef_])
>>> [[ 0.61241566 0.02727579 -0.06363385 0.05303027]]
Run Code Online (Sandbox Code Playgroud)
我可以采取哪些建议来解决这种差异?
我有一个DataFrame如下:
Ticker Date Close
0 ADBE 2016-02-16 78.88
1 ADBE 2016-02-17 81.85
2 ADBE 2016-02-18 80.53
3 ADBE 2016-02-19 80.87
4 ADBE 2016-02-22 83.80
5 ADBE 2016-02-23 83.07
Run Code Online (Sandbox Code Playgroud)
...等等。该Date列是问题。我正在尝试使用Date列获取列的线性回归Close:
ols1 = pd.ols(y=ADBE['Close'], x=ADBE['Date'], intercept=True)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
TypeError: cannot astype a datetimelike from [datetime64[ns]] to [float64]
Run Code Online (Sandbox Code Playgroud)
我尝试了多种方法来消除此错误,例如:
dates_input = ADBE['Date'].values.astype('datetime64[D]')
dates_input = ADBE['Date'].values.astype('float')
Run Code Online (Sandbox Code Playgroud)
第二次dates_input尝试返回的类型为,pandas.core.series.Series但是我仍然收到错误消息。
有谁知道如何使Date列工作并摆脱此TypeError?
python ×9
scikit-learn ×6
pandas ×2
constants ×1
dataframe ×1
numpy ×1
r ×1
scipy ×1
tensorflow ×1
time-series ×1