这是关于回归正则化的初学者问题.关于弹性网和套索回归的大多数信息在线复制来自维基百科的信息或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中的scikit-learn库中使用ngrams感到有点困惑,具体来说,这个ngram_range参数在CountVectorizer中是如何工作的.
运行此代码:
from sklearn.feature_extraction.text import CountVectorizer
vocabulary = ['hi ', 'bye', 'run away']
cv = CountVectorizer(vocabulary=vocabulary, ngram_range=(1, 2))
print cv.vocabulary_
Run Code Online (Sandbox Code Playgroud)
给我:
{'hi ': 0, 'bye': 1, 'run away': 2}
Run Code Online (Sandbox Code Playgroud)
在我明显错误的印象中,我会得到unigrams和bigrams,就像这样:
{'hi ': 0, 'bye': 1, 'run away': 2, 'run': 3, 'away': 4}
Run Code Online (Sandbox Code Playgroud)
我正在使用这里的文档:http: //scikit-learn.org/stable/modules/feature_extraction.html
显然,我对如何使用ngrams的理解存在严重错误.也许这个论点没有效果,或者我对一个真正的二元组有一些概念上的问题!我很难过.如果有人提出建议,我会感激不尽.
更新:
我意识到了我的方式的愚蠢.我的印象是ngram_range会影响词汇,而不是语料库.
根据scikit-learn用户指南,我安装了scikit-learn使用pip install -U scikit-learn.
所以使用pip search scikit-learn,我得到这个搜索结果:
scikit-learn - A set of python modules for machine learning and data mining
INSTALLED: 0.12.1 (latest)
Run Code Online (Sandbox Code Playgroud)
但是当我进入Python尝试时import sklearn,我得到了一个ImportError: No module named sklearn.这真的应该有效.
我在Mac OS 10.6.8上使用Enthought免费发布Python(2.7.3),使用NumPy 1.6.1和SciPy 0.10.1.是的,我知道EPD Free带有scikit-learn但是pip应该升级我的版本,以便我可以实际使用scikit-learn.
我想知道是否有更好的内置方式来进行网格搜索并在单个管道中测试多个模型.当然,模型的参数会有所不同,这对我来说很复杂.这是我做的:
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.naive_bayes import MultinomialNB
from sklearn.grid_search import GridSearchCV
def grid_search():
pipeline1 = Pipeline((
('clf', RandomForestClassifier()),
('vec2', TfidfTransformer())
))
pipeline2 = Pipeline((
('clf', KNeighborsClassifier()),
))
pipeline3 = Pipeline((
('clf', SVC()),
))
pipeline4 = Pipeline((
('clf', MultinomialNB()),
))
parameters1 = {
'clf__n_estimators': [10, 20, 30],
'clf__criterion': ['gini', 'entropy'],
'clf__max_features': [5, 10, 15],
'clf__max_depth': ['auto', 'log2', 'sqrt', None]
}
parameters2 = {
'clf__n_neighbors': [3, 7, 10], …Run Code Online (Sandbox Code Playgroud) 从文档 scikit-learn实现了SVC,NuSVC和LinearSVC,它们是能够对数据集执行多类分类的类.另一方面,我也读到了scikit学习也使用libsvm进行支持向量机算法.我对SVC和libsvm版本之间的区别有点困惑,现在我猜不同的是,SVC是多类问题的支持向量机算法,而libsvm是二进制类问题.有人能帮助我解决这个之间的区别吗?
大师,
当选择主成分数(k)时,我们选择k作为最小值,以便保留例如99%的方差.
但是,在Python Scikit学习中,我不是100%肯定pca.explained_variance_ratio_ = 0.99等于"99%的方差被保留"?谁能开导?谢谢.
在进行拟合时,我总是遇到类似的代码
clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)
(来自http://scikit-learn.org/stable/modules/cross_validation.html#k-fold)
什么clf代表什么?我用Google搜索,但没有发现任何线索.
我使用标签编码器将分类数据转换为数值.
LabelEncoder如何处理缺失值?
from sklearn.preprocessing import LabelEncoder
import pandas as pd
import numpy as np
a = pd.DataFrame(['A','B','C',np.nan,'D','A'])
le = LabelEncoder()
le.fit_transform(a)
Run Code Online (Sandbox Code Playgroud)
输出:
array([1, 2, 3, 0, 4, 1])
Run Code Online (Sandbox Code Playgroud)
对于上面的示例,标签编码器将NaN值更改为类别.我怎么知道哪个类别代表缺失值?
我一直在比较Python和R的几个PCA实现的性能,并注意到一个有趣的行为:
虽然在Python中计算稀疏矩阵的PCA似乎是不可能的(唯一的方法是scikit-learn的 TruncatedSVD,但它确实如此)不支持平均居中要求等同于PCA的协方差解决方案.他们的论证是,它会破坏矩阵的稀疏性.其他实现如Facebook的PCA算法或scikit中的PCA/randomPCA方法学习不支持稀疏矩阵出于类似的原因.
虽然所有这些对我来说都是有意义的,但是几个R包,如irlba,rsvd等,能够处理稀疏矩阵(例如生成rsparsematrix),甚至允许特定的center=True参数.
我的问题是,R如何在内部处理它,因为它似乎比类似的Python实现更有效.R是否仍然通过绝对缩放来保持稀疏性(这理论上会伪造结果,但至少保持稀疏性)?或者有没有任何方法可以明确地为零值存储均值,并且只存储一次(而不是分别存储每个值)?
为了得到推迟:R内部如何存储具有均值中心的矩阵而不会爆炸RAM使用.希望足够简洁....
scikit-learn ×10
python ×9
pca ×2
libsvm ×1
n-gram ×1
pandas ×1
r ×1
regression ×1
scikits ×1
statistics ×1
time-series ×1