我一直在努力训练一个神经网络来识别我有三种类型的标签(圆形,矩形和空白).我使用示例设置来识别这里提供的数字数据集,发现我得到了75%的正确预测率,几乎没有任何调整(假设我的图像有一定程度的预处理过滤器等).
我更感兴趣的是分类器部分(下面的代码).我不确定不同的卷积和图层选项是做什么的,以及我有什么选择来调整它们.有没有人对我可以用来尝试提高我的预测准确度及其含义的其他卷积或层有任何建议?对于含糊不清的道歉,这是我第一次触及NN并且正在努力解决这个问题.
nn = Classifier(
layers=[
Convolution('Rectifier', channels=12, kernel_shape=(3, 3), border_mode='full'),
Convolution('Rectifier', channels=8, kernel_shape=(3, 3), border_mode='valid'),
Layer('Rectifier', units=64),
Layer('Softmax')],
learning_rate=0.002,
valid_size=0.2,
n_stable=10,
verbose=True)
Run Code Online (Sandbox Code Playgroud)
python machine-learning neural-network scikit-learn scikit-image
我使用GridSearchCV进行线性回归的交叉验证(不是分类器也不是逻辑回归).
我还使用StandardScaler来标准化X.
我的数据框有17个特征(X)和5个目标(y)(观察).大约1150行
我一直得到ValueError:不支持连续错误消息并且没有选项.
这里有一些代码(假设所有导入都正确完成):
soilM = pd.read_csv('C:/training.csv', index_col=0)
soilM = getDummiedSoilDepth(soilM) #transform text values in 0 and 1
soilM = soilM.drop('Depth', 1)
soil = soilM.iloc[:,-22:]
X_train, X_test, Ca_train, Ca_test, P_train, P_test, pH_train, pH_test, SOC_train, SOC_test, Sand_train, Sand_test = splitTrainTestAdv(soil)
scores = ['precision', 'recall']
for score in scores:
for model in MODELS.keys():
print model, score
performParameterSelection(model, score, X_test, Ca_test, X_train, Ca_train)
def performParameterSelection(model_name, criteria, X_test, y_test, X_train, y_train):
model, param_grid = MODELS[model_name]
gs = GridSearchCV(model, param_grid, n_jobs= 1, cv=5, verbose=1, …Run Code Online (Sandbox Code Playgroud) 我刚接触scikit学习,而且我正撞在墙上.我已经使用了现实世界和测试数据,并且scikit算法在预测任何事情时都没有达到机会水平以上.我尝试过knn,决策树,svc和天真的贝叶斯.
基本上,我制作了一个由0和1列组成的测试数据集,所有0都具有介于0和0.5之间的特征,所有1都具有介于0.5和1之间的特征值.这应该非常简单并且给出接近100%的准确度.但是,没有一种算法在机会级别之上执行.准确率从45%到55%不等.我已经尝试为每个算法调整一大堆参数,但注意到有帮助.我认为我的实施存在根本性的错误.
请帮帮我.这是我的代码:
from sklearn.cross_validation import train_test_split
from sklearn import preprocessing
from sklearn.preprocessing import OneHotEncoder
from sklearn.metrics import accuracy_score
import sklearn
import pandas
import numpy as np
df=pandas.read_excel('Test.xlsx')
# Make data into np arrays
y = np.array(df[1])
y=y.astype(float)
y=y.reshape(399)
x = np.array(df[2])
x=x.astype(float)
x=x.reshape(399, 1)
# Creating training and test data
labels_train, labels_test = train_test_split(y)
features_train, features_test = train_test_split(x)
#####################################################################
# PERCEPTRON
#####################################################################
from sklearn import linear_model
perceptron=linear_model.Perceptron()
perceptron.fit(features_train, labels_train)
perc_pred=perceptron.predict(features_test)
print sklearn.metrics.accuracy_score(labels_test, perc_pred, normalize=True, sample_weight=None)
print 'perceptron'
#####################################################################
# …Run Code Online (Sandbox Code Playgroud) 在python sklearn库中,同时支持RandomizedLogisticRegression和RandomizedLasso作为特征选择方法。
但是,它们都使用L1(Lasso)惩罚,我不确定为什么都实现了它们。实际上,尽管我将Lasso回归称为L1正规化logistic回归的另一个术语,但似乎有些差异。我认为,即使是带有L1惩罚(与重采样结合)的Linear SVM也将产生类似的结果。
它们之间有显着差异吗?
我正在使用PCA,我在Python中发现了sklearn中的PCA,而在Matlab中发现了pca()产生了不同的结果.这是我正在使用的测试矩阵.
a = np.array([[-1,-1], [-2,-1], [-3, -2], [1,1], [2,1], [3,2]])
Run Code Online (Sandbox Code Playgroud)
对于Python sklearn,我得到了
p = PCA()
print(p.fit_transform(a))
[[-1.38340578 0.2935787 ]
[-2.22189802 -0.25133484]
[-3.6053038 0.04224385]
[ 1.38340578 -0.2935787 ]
[ 2.22189802 0.25133484]
[ 3.6053038 -0.04224385]]
Run Code Online (Sandbox Code Playgroud)
对于Matlab,我得到了
pca(a', 'Centered', false)
[0.2196 0.5340
0.3526 -0.4571
0.5722 0.0768
-0.2196 -0.5340
-0.3526 0.4571
-0.5722 -0.0768]
Run Code Online (Sandbox Code Playgroud)
为什么观察到这种差异?
谢谢Dan的回答.结果现在看起来很合理.但是,如果我使用随机矩阵进行测试,似乎Matlab和Python正在产生的结果不是彼此的标量倍数.为什么会这样?
test matrix a:
[[ 0.36671885 0.77268624 0.94687497]
[ 0.75741855 0.63457672 0.88671836]
[ 0.20818031 0.709373 0.45114135]
[ 0.24488718 0.87400025 0.89382836]
[ 0.16554686 0.74684393 0.08551401]
[ 0.07371664 0.1632872 0.84217978]]
Run Code Online (Sandbox Code Playgroud)
Python结果:
p …Run Code Online (Sandbox Code Playgroud) 有人可以帮我调试这段代码吗?谢谢!
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn import linear_model
data = pd.read_csv('Mower.csv')
data = data.values
y = data[:,2]
x = data[:,:2]
y_train = y[:int(0.3*len(y))]
x_train = x[:int(0.3*len(y)),:]
y_validate = y[int(0.3*len((y))):]
x_validate = x[int(0.3*len((y))):,:]
clf = linear_model.LogisticRegression
clf.fit(x_train,y_train)
y_hat = clf.predict(x_validate)
Run Code Online (Sandbox Code Playgroud)
给我以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-77-a0a54feba3ef> in <module>()
1 clf = linear_model.LogisticRegression
----> 2 clf.fit(x_train,y_train)
3 y_hat = clf.predict(x_validate)
TypeError: unbound method fit() must be called with …Run Code Online (Sandbox Code Playgroud) 我将使用逻辑回归来预测电影的票房.我得到了一些火车数据,包括演员和导演.这是我的数据:
Director1|Actor1|300 million
Director2|Actor2|500 million
Run Code Online (Sandbox Code Playgroud)
我将使用整数对导演和演员进行编码.
1|1|300 million
2|2|300 million
Run Code Online (Sandbox Code Playgroud)
这意味着X={[1,1],[2,2]} y=[300,500]和fit(X,y)
运作的?
正如标题所说,我使用fit_transform与CountVectorizer训练数据..然后我使用tranform只能用测试数据... ...将这个给了我一样使用fit只在训练和tranform只对测试数据?
下面给出的是我的代码
dataset = np.genfromtxt('train_py.csv', dtype=float, delimiter=",")
X_train, X_test, y_train, y_test = train_test_split(dataset[:,:-1],dataset[:,-1], test_size=0.2,random_state=0)
model = tree.DecisionTreeClassifier(criterion='gini')
#y_train = y_train.tolist()
#X_train = X_train.tolist()
model.fit(X_train, y_train)
model.score(X_train, y_train)
predicted= model.predict(x_test)
Run Code Online (Sandbox Code Playgroud)
我正在尝试在使用numpy库导入的自定义数据集上使用决策树分类器。但是当我尝试拟合模型时,我得到了ValueError。我尝试同时使用numpy数组和非numpy数组(例如列表),但似乎仍然无法找出导致错误的原因。任何帮助表示赞赏。
Traceback (most recent call last):
File "tree.py", line 19, in <module>
model.fit(X_train, y_train)
File "/usr/local/lib/python2.7/dist-packages/sklearn/tree/tree.py", line 177, in fit
check_classification_targets(y)
File "/usr/local/lib/python2.7/dist-packages/sklearn/utils/multiclass.py", line 173, in check_classification_targets
raise ValueError("Unknown label type: %r" % y)
ValueError: Unknown label type: array([[ 252.3352],....<until end of array>
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用网格搜索来选择数据的主成分数量,然后再进行线性回归.我很困惑如何制作我想要的主要组件数量的字典.我把我的列表放在param_grid参数中的字典格式中,但我认为我做错了.到目前为止,我已经收到有关包含infs或NaN的数组的警告.
我遵循将线性回归流水线化为PCA的说明:http://scikit-learn.org/stable/auto_examples/plot_digits_pipe.html
ValueError:数组不能包含infs或NaN
我能够在可重现的示例中得到相同的错误,我的真实数据集更大:
import pandas as pd
import numpy as np
from sklearn.decomposition import PCA
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
df2 = pd.DataFrame({ 'C' : pd.Series(1, index = list(range(8)),dtype = 'float32'),
'D' : np.array([3] * 8,dtype = 'int32'),
'E' : pd.Categorical(["test", "train", "test", "train",
"test", "train", "test", "train"])})
df3 = pd.get_dummies(df2)
lm = LinearRegression()
pipe = [('pca',PCA(whiten=True)),
('clf' ,lm)]
pipe = Pipeline(pipe)
param_grid = {
'pca__n_components': np.arange(2,4)}
X = …Run Code Online (Sandbox Code Playgroud) scikit-learn ×10
python ×9
pca ×2
regression ×2
algorithm ×1
grid-search ×1
matlab ×1
numpy ×1
pandas ×1
scikit-image ×1