我似乎找不到任何进行多重回归的python库.我发现的唯一的东西只做简单的回归.我需要对几个自变量(x1,x2,x3等)回归我的因变量(y).
例如,使用此数据:
print 'y x1 x2 x3 x4 x5 x6 x7'
for t in texts:
print "{:>7.1f}{:>10.2f}{:>9.2f}{:>9.2f}{:>10.2f}{:>7.2f}{:>7.2f}{:>9.2f}" /
.format(t.y,t.x1,t.x2,t.x3,t.x4,t.x5,t.x6,t.x7)
Run Code Online (Sandbox Code Playgroud)
(以上输出:)
y x1 x2 x3 x4 x5 x6 x7
-6.0 -4.95 -5.87 -0.76 14.73 4.02 0.20 0.45
-5.0 -4.55 -4.52 -0.71 13.74 4.47 0.16 0.50
-10.0 -10.96 -11.64 -0.98 15.49 4.18 0.19 0.53
-5.0 -1.08 -3.36 0.75 24.72 4.96 0.16 0.60
-8.0 -6.52 -7.45 -0.86 16.59 4.29 0.10 0.48
-3.0 -0.81 -2.36 -0.50 22.44 4.81 0.15 0.53
-6.0 -7.01 -7.33 -0.33 …
Run Code Online (Sandbox Code Playgroud) 这些是关于如何计算和减少机器学习过度拟合的问题.我认为许多新的机器学习会有同样的问题,所以我试着清楚我的例子和问题,希望这里的答案可以帮助别人.
我有一个非常小的文本样本,我正在尝试预测与它们相关的值.我已经使用sklearn来计算tf-idf,并将它们插入到回归模型中进行预测.这给了我26个样本,6323个功能 - 不是很多..我知道:
>> count_vectorizer = CountVectorizer(min_n=1, max_n=1)
>> term_freq = count_vectorizer.fit_transform(texts)
>> transformer = TfidfTransformer()
>> X = transformer.fit_transform(term_freq)
>> print X.shape
(26, 6323)
Run Code Online (Sandbox Code Playgroud)
将这些6323个特征(X)和相关分数(y)的26个样本插入到LinearRegression
模型中,可以得到很好的预测.这些是使用留一法交叉验证获得的,来自cross_validation.LeaveOneOut(X.shape[0], indices=True)
:
using ngrams (n=1):
human machine points-off %error
8.67 8.27 0.40 1.98
8.00 7.33 0.67 3.34
... ... ... ...
5.00 6.61 1.61 8.06
9.00 7.50 1.50 7.50
mean: 7.59 7.64 1.29 6.47
std : 1.94 0.56 1.38 6.91
Run Code Online (Sandbox Code Playgroud)
非常好!使用ngrams(n = 300)而不是unigrams(n = 1),会出现类似的结果,这显然是不对的.在任何文本中都不会出现300个单词,因此预测应该会失败,但它不会:
using ngrams (n=300):
human machine …
Run Code Online (Sandbox Code Playgroud) 这是关于回归正则化的初学者问题.关于弹性网和套索回归的大多数信息在线复制来自维基百科的信息或Zou和Hastie的原始2005年论文(通过弹性网进行正则化和变量选择).
简单理论的资源?是否有一个简单易懂的解释,关于它的作用,何时以及为什么需要进行重新定制,以及如何使用它 - 对于那些没有统计倾向的人?我理解原始论文是理想的来源,如果你能理解它,但是在某个地方更简单的问题和解决方案吗?
如何在sklearn中使用?有没有一步一步的例子说明为什么选择弹性网(过岭,套索,或只是简单的OLS)以及如何计算参数?sklearn上的许多示例只是将alpha和rho参数直接包含在预测模型中,例如:
from sklearn.linear_model import ElasticNet
alpha = 0.1
enet = ElasticNet(alpha=alpha, rho=0.7)
y_pred_enet = enet.fit(X_train, y_train).predict(X_test)
Run Code Online (Sandbox Code Playgroud)
但是,他们没有解释这些是如何计算的.你如何计算套索或网的参数?
你如何计算python中的最佳拟合线,然后在matplotlib的散点图上绘制它?
我是使用普通最小二乘回归计算线性最佳拟合线,如下所示:
from sklearn import linear_model
clf = linear_model.LinearRegression()
x = [[t.x1,t.x2,t.x3,t.x4,t.x5] for t in self.trainingTexts]
y = [t.human_rating for t in self.trainingTexts]
clf.fit(x,y)
regress_coefs = clf.coef_
regress_intercept = clf.intercept_
Run Code Online (Sandbox Code Playgroud)
这是多变量的(每种情况都有很多x值).因此,X是列表列表,y是单个列表.例如:
x = [[1,2,3,4,5], [2,2,4,4,5], [2,2,4,4,1]]
y = [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
但是我如何使用高阶多项式函数来做到这一点.例如,不仅是线性(x到M = 1的幂),而是二项式(x到M = 2的幂),二次方(x到M = 4的幂),依此类推.例如,如何从以下获得最佳拟合曲线?
摘自Christopher Bishops的"模式识别与机器学习",第7页:
我有多个文本,我想根据各种词性的使用来创建它们的配置文件,如名词和动词.基本上,我需要计算每个词性的使用次数.
我已经标记了文字,但我不确定如何进一步:
tokens = nltk.word_tokenize(text.lower())
text = nltk.Text(tokens)
tags = nltk.pos_tag(text)
Run Code Online (Sandbox Code Playgroud)
如何将每个词性的计数保存到变量中?
Python(scipy.stats.hmean
)中的Harmonic Mean函数要求输入为正数.
例如:
from scipy import stats
print stats.hmean([ -50.2 , 100.5 ])
Run Code Online (Sandbox Code Playgroud)
结果是:
ValueError: Harmonic mean only defined if all elements greater than zero
Run Code Online (Sandbox Code Playgroud)
我没有在数学上看到为什么会出现这种情况,除了罕见的情况,你最终将除以零.不是检查除以零,而是hmean()
在输入任何正数时抛出错误,无论是否可以找到调和平均值.
我在数学中遗漏了什么吗?或者这真的是一个限制SciPy
吗?
你如何找到一组数字的调和平均值,这些数字在python中可能是正数还是负数?
我正在将一堆RTF文件读入python字符串.在某些文本中,我收到此错误:
Traceback (most recent call last):
File "11.08.py", line 47, in <module>
X = vectorizer.fit_transform(texts)
File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line
716, in fit_transform
X = super(TfidfVectorizer, self).fit_transform(raw_documents)
File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line
398, in fit_transform
term_count_current = Counter(analyze(doc))
File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line
313, in <lambda>
tokenize(preprocess(self.decode(doc))), stop_words)
File "C:\Python27\lib\site-packages\sklearn\feature_extraction\text.py", line
224, in decode
doc = doc.decode(self.charset, self.charset_error)
File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x92 in position 462: invalid
start byte
Run Code Online (Sandbox Code Playgroud)
我试过了:
我有3个评级者对60个案例的评分.这些是按文档组织的列表 - 第一个元素是指第一个文档的评级,第二个文档的第二个,依此类推:
rater1 = [-8,-7,8,6,2,-5,...]
rater2 = [-3,-5,3,3,2,-2,...]
rater3 = [-4,-2,1,0,0,-2,...]
Run Code Online (Sandbox Code Playgroud)
在某个地方是否有Cohen的Kappa的python实现?我在numpy或scipy中找不到任何东西,而且stackoverflow上没有任何东西,但也许我错过了它?这是一个非常常见的统计数据,所以我很惊讶我找不到像Python这样的语言.
我打印了几个列表,但值没有排序.
for f, h, u, ue, b, be, p, pe, m, me in zip(filename, human_rating, rating_unigram, percentage_error_unigram, rating_bigram, percentage_error_bigram, rating_pos, percentage_error_pos, machine_rating, percentage_error_machine_rating):
print "{:>6s}{:>5.1f}{:>7.2f}{:>8.2f} {:>7.2f} {:>7.2f} {:>7.2f} {:>8.2f} {:>7.2f} {:>8.2f}".format(f,h,u,ue,b,be,p,pe,m,me)
Run Code Online (Sandbox Code Playgroud)
根据'filename'中的值对所有这些列表进行排序的最佳方法是什么?
因此,如果:
filename = ['f3','f1','f2']
human_rating = ['1','2','3']
etc.
Run Code Online (Sandbox Code Playgroud)
然后排序将返回:
filename = ['f1','f2','f3']
human_rating = ['2','3','1']
etc.
Run Code Online (Sandbox Code Playgroud) 问题:如何根据列表中的值将1个稀疏矩阵拆分为2?
也就是说,我有一个稀疏矩阵X
:
>>print type(X)
<class 'scipy.sparse.csr.csr_matrix'>
Run Code Online (Sandbox Code Playgroud)
我在脑海中将其视为列表列表,如下所示:
>>print X.todense()
[[1,3,4]
[3,2,2]
[4,8,1]]
Run Code Online (Sandbox Code Playgroud)
我有一个如下所示的列表y
:
y = [-1,
3,
-4]
Run Code Online (Sandbox Code Playgroud)
我如何X
分成两个稀疏矩阵,取决于相应的值y
是正还是负?例如,我怎样才能得到:
>>print X_pos.todense()
[[3,2,2]]
>>print X_neg.todense()
[[1,3,4]
[4,8,1]]
Run Code Online (Sandbox Code Playgroud)
结果(X_pos
和X_neg
)也应该是稀疏矩阵,因为它只是将稀疏矩阵拆分开始.
谢谢!
python ×10
statistics ×4
numpy ×3
regression ×3
scikit-learn ×3
scipy ×3
encoding ×1
list ×1
math ×1
matplotlib ×1
mean ×1
nlp ×1
nltk ×1
rating ×1
scatter-plot ×1
tagging ×1
utf-8 ×1