我试图在python中使用来自scikit-learn 的多层感知器.我的问题是,导入无效.来自scikit-learn的所有其他模块都运行正常.
from sklearn.neural_network import MLPClassifier
Run Code Online (Sandbox Code Playgroud)
导入错误:无法导入名称MLPClassifier
我在Visual Studio 2015中使用Python环境Python64位3.4.我在控制台上安装了sklearn:conda install scikit-learn
我还安装了numpy和pandas.在我遇到上述错误后,我还安装了scikit-neuralnetwork:pip install scikit-neuralnetwork
已安装的scikit-learn版本为0.17.
我做错了什么?我错过了安装吗?
-----编辑----
除了tttthomasss的答案,我找到了如何为神经元网络安装sknn库的解决方案.我按照本教程.执行以下步骤:
pip install scikit-neuralnetworkconda install mingw libpython您可以在之后使用sknn库.
我正在尝试使用sklearn评估多个机器学习算法,以获得几个指标(准确度,召回率,精度等等).
对于我从这里的文档和源代码(我使用sklearn 0.17)中理解的内容,cross_val_score函数只为每次执行接收一个记分器.因此,为了计算多个分数,我必须:
实施我的(耗时且容易出错的)得分手
我用这段代码执行了多次:
from sklearn.svm import SVC
from sklearn.naive_bayes import GaussianNB
from sklearn.tree import DecisionTreeClassifier
from sklearn.cross_validation import cross_val_score
import time
from sklearn.datasets import load_iris
iris = load_iris()
models = [GaussianNB(), DecisionTreeClassifier(), SVC()]
names = ["Naive Bayes", "Decision Tree", "SVM"]
for model, name in zip(models, names):
print name
start = time.time()
for score in ["accuracy", "precision", "recall"]:
print score,
print " : ",
print cross_val_score(model, iris.data, iris.target,scoring=score, cv=10).mean()
print time.time() - start
Run Code Online (Sandbox Code Playgroud)我得到这个输出: …
我不知道出了什么问题,但突然KMeans不再sklearn工作了,我不知道我做错了什么。有没有人遇到过这个问题或者知道我该如何解决它?
from sklearn.cluster import KMeans
kmeanModel = KMeans(n_clusters=k, random_state=0)
kmeanModel.fit(allLocations)
Run Code Online (Sandbox Code Playgroud)
allLocations看起来像这样:
array([[12.40236 , 51.38086 ],
[12.40999 , 51.38494 ],
[12.40599 , 51.37284 ],
[12.28692 , 51.32039 ],
[12.41349 , 51.34443 ], ...])
Run Code Online (Sandbox Code Playgroud)
并allLocations.dtype给出dtype('float64').
scikit-learn 版本是 1.0.2,NumPy 版本是 1.22.2,我使用的是 Jupyter Notebook。
错误说:
'NoneType' object has no attribute 'split'
整个错误看起来像这样:
AttributeError Traceback (most recent call last)
<ipython-input-30-db8e8220c8b9> in <module>
12 for k in K:
13 kmeanModel = KMeans(n_clusters=k, random_state=0)
---> 14 kmeanModel.fit(allLocations)
15 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Python中的scikit-learn设计一个简单的决策树(我在Windows操作系统上使用Anaconda的Ipython Notebook和Python 2.7.3),并将其可视化如下:
from pandas import read_csv, DataFrame
from sklearn import tree
from os import system
data = read_csv('D:/training.csv')
Y = data.Y
X = data.ix[:,"X0":"X33"]
dtree = tree.DecisionTreeClassifier(criterion = "entropy")
dtree = dtree.fit(X, Y)
dotfile = open("D:/dtree2.dot", 'w')
dotfile = tree.export_graphviz(dtree, out_file = dotfile, feature_names = X.columns)
dotfile.close()
system("dot -Tpng D:.dot -o D:/dtree2.png")
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
AttributeError: 'NoneType' object has no attribute 'close'
Run Code Online (Sandbox Code Playgroud)
我使用以下博客文章作为参考:Blogpost链接
以下stackoverflow问题对我来说似乎也不起作用:问题
有人可以帮助我如何在scikit-learn中可视化决策树吗?
我使用DBSCAN使用Scikit-Learn(Python 2.7)聚集一些数据:
from sklearn.cluster import DBSCAN
dbscan = DBSCAN(random_state=0)
dbscan.fit(X)
Run Code Online (Sandbox Code Playgroud)
但是,我发现没有内置函数(除了"fit_predict"之外)可以将新数据点Y分配给原始数据中标识的簇X.K-means方法有一个"预测"功能,但我希望能够对DBSCAN做同样的事情.像这样的东西:
dbscan.predict(X, Y)
Run Code Online (Sandbox Code Playgroud)
因此密度可以从X推断,但返回值(集群分配/标签)仅适用于Y.从我所知道的,这个功能在R中可用,所以我假设它在某种程度上也可用于Python.我似乎无法找到任何相关的文档.
此外,我已经尝试搜索为什么DBSCAN不能用于标记新数据的原因,但我没有找到任何理由.
数据集是pandas数据帧.这是sklearn.cluster.KMeans
km = KMeans(n_clusters = n_Clusters)
km.fit(dataset)
prediction = km.predict(dataset)
Run Code Online (Sandbox Code Playgroud)
这就是我如何决定哪个实体属于哪个集群:
for i in range(len(prediction)):
cluster_fit_dict[dataset.index[i]] = prediction[i]
Run Code Online (Sandbox Code Playgroud)
这就是数据集的外观:
A 1 2 3 4 5 6
B 2 3 4 5 6 7
C 1 4 2 7 8 1
...
Run Code Online (Sandbox Code Playgroud)
其中A,B,C是指数
这是使用k-means的正确方法吗?
我使用支持向量回归作为GridSearchCV中的估算器.但我想改变错误函数:而不是使用默认值(R平方:确定系数),我想定义我自己的自定义错误函数.
我尝试用一个make_scorer,但它没有用.
我阅读了文档并发现可以创建自定义估算器,但我不需要重新制作整个估算器 - 只有错误/评分函数.
我认为我可以通过将可调用者定义为得分者来实现,就像在文档中所说的那样.
但我不知道如何使用估算器:在我的情况下SVR.我是否必须切换到分类器(例如SVC)?我将如何使用它?
我的自定义错误功能如下:
def my_custom_loss_func(X_train_scaled, Y_train_scaled):
error, M = 0, 0
for i in range(0, len(Y_train_scaled)):
z = (Y_train_scaled[i] - M)
if X_train_scaled[i] > M and Y_train_scaled[i] > M and (X_train_scaled[i] - Y_train_scaled[i]) > 0:
error_i = (abs(Y_train_scaled[i] - X_train_scaled[i]))**(2*np.exp(z))
if X_train_scaled[i] > M and Y_train_scaled[i] > M and (X_train_scaled[i] - Y_train_scaled[i]) < 0:
error_i = -(abs((Y_train_scaled[i] - X_train_scaled[i]))**(2*np.exp(z)))
if X_train_scaled[i] > M and Y_train_scaled[i] …Run Code Online (Sandbox Code Playgroud) 我正在尝试执行一个简单数据集的热编码.
data = [['a', 'dog', 'red']
['b', 'cat', 'green']]
Run Code Online (Sandbox Code Playgroud)
使用Scikit-Learn预处理此数据的最佳方法是什么?
在第一直觉上,你会看到Scikit-Learn的OneHotEncoder.但是一个热门编码器不支持字符串作为功能; 它只会离散整数.
那么你将使用LabelEncoder,它将字符串编码为整数.但是,您必须将标签编码器应用到每个列中,并存储这些标签编码器中的每一个(以及它们所应用的列).这感觉非常笨重.
那么,在Scikit-Learn中最好的方法是什么?
请不要建议pandas.get_dummies.这就是我现在通常使用的一种热编码方式.但是,它无法单独编码您的训练/测试集.
我正在使用两个单独的培训和测试集在python中构建预测模型.训练数据包含数字类型分类变量,例如邮政编码,[91521,23151,12355,...],以及字符串分类变量,例如,城市['芝加哥','纽约','洛杉矶', ...].
为了训练数据,我首先使用'pd.get_dummies'来获取这些变量的虚拟变量,然后使用转换的训练数据拟合模型.
我对测试数据进行相同的转换,并使用训练模型预测结果.但是,我收到错误'ValueError:模型的功能数必须与输入匹配.模型n_features为1487,输入n_features为1345'.原因是测试数据中的虚拟变量较少,因为它具有较少的"城市"和"邮政编码".
我怎么解决这个问题?例如,'OneHotEncoder'将仅编码所有数字类型的分类变量.'DictVectorizer()'只会编码所有字符串类型的分类变量.我在线搜索并看到一些类似的问题,但没有一个真正解决我的问题.
https://www.quora.com/What-is-the-best-way-to-do-a-binary-one-hot-one-of-K-coding-in-Python
我尝试运行以下代码.顺便说一句,我是python和sklearn的新手.
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
# data import and preparation
trainData = pd.read_csv('train.csv')
train = trainData.values
testData = pd.read_csv('test.csv')
test = testData.values
X = np.c_[train[:, 0], train[:, 2], train[:, 6:7], train[:, 9]]
X = np.nan_to_num(X)
y = train[:, 1]
Xtest = np.c_[test[:, 0:1], test[:, 5:6], test[:, 8]]
Xtest = np.nan_to_num(Xtest)
# model
lr = LogisticRegression()
lr.fit(X, y)
Run Code Online (Sandbox Code Playgroud)
其中y是0和1的np.ndarray
我收到以下内容:
文件"C:\ Anaconda3\lib\site-packages\sklearn\linear_model\logistic.py",line> 1174,in fit check_classification_targets(y)
文件"C:\ Anaconda3\lib\site-packages\sklearn\utils\multiclass.py",第172行,>在check_classification_targets中引发ValueError("未知标签类型:%r"%y_type)
ValueError:未知标签类型:'未知'
来自sklearn文档:http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression.fit
y:类似数组,形状(n_samples,)目标值(分类中的类标签,回归中的实数)
我的错误是什么? …
scikit-learn ×10
python ×9
numpy ×2
pandas ×2
data-mining ×1
dataframe ×1
dbscan ×1
encoding ×1
k-means ×1
predict ×1
prediction ×1