标签: scikit-learn

SKlearn导入MLPClassifier失败

我试图在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-neuralnetwork
  • 下载并安装GCC编译器
  • 安装mingw conda install mingw libpython

您可以在之后使用sknn库.

python neural-network scikit-learn

31
推荐指数
3
解决办法
3万
查看次数

评估sklearn cross_val_score上的多个分数

我正在尝试使用sklearn评估多个机器学习算法,以获得几个指标(准确度,召回率,精度等等).

对于我从这里的文档和源代码(我使用sklearn 0.17)中理解的内容,cross_val_score函数只为每次执行接收一个记分器.因此,为了计算多个分数,我必须:

  1. 执行多次
  2. 实施我的(耗时且容易出错的)得分手

    我用这段代码执行了多次:

    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)

我得到这个输出: …

python machine-learning scikit-learn

31
推荐指数
2
解决办法
2万
查看次数

sklearn KMeans 不起作用,因为我只得到“NoneType”对象在非空数组上没有属性“split”

我不知道出了什么问题,但突然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 numpy scikit-learn jupyter-notebook

31
推荐指数
4
解决办法
4万
查看次数

在scikit-learn中可视化决策树

我正在尝试使用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中可视化决策树吗?

python visualization decision-tree scikit-learn

30
推荐指数
7
解决办法
8万
查看次数

Scikit-Learn:使用DBSCAN预测新点数

我使用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不能用于标记新数据的原因,但我没有找到任何理由.

cluster-analysis data-mining predict dbscan scikit-learn

30
推荐指数
3
解决办法
1万
查看次数

pandas dataframe对象是否可以与sklearn kmeans聚类一起使用?

数据集是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的正确方法吗?

python cluster-analysis k-means pandas scikit-learn

30
推荐指数
2
解决办法
4万
查看次数

如何在scikit-learn中创建/自定义自己的得分手功能?

我使用支持向量回归作为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)

python scikit-learn

30
推荐指数
2
解决办法
2万
查看次数

scikit-learn:字符串分类功能的一种热门编码

我正在尝试执行一个简单数据集的热编码.

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 encoding scikit-learn one-hot-encoding

30
推荐指数
2
解决办法
1万
查看次数

在训练和测试数据中保持相同的虚拟变量

我正在使用两个单独的培训和测试集在python中构建预测模型.训练数据包含数字类型分类变量,例如邮政编码,[91521,23151,12355,...],以及字符串分类变量,例如,城市['芝加哥','纽约','洛杉矶', ...].

为了训练数据,我首先使用'pd.get_dummies'来获取这些变量的虚拟变量,然后使用转换的训练数据拟合模型.

我对测试数据进行相同的转换,并使用训练模型预测结果.但是,我收到错误'ValueError:模型的功能数必须与输入匹配.模型n_features为1487,输入n_features为1345'.原因是测试数据中的虚拟变量较少,因为它具有较少的"城市"和"邮政编码".

我怎么解决这个问题?例如,'OneHotEncoder'将仅编码所有数字类型的分类变量.'DictVectorizer()'只会编码所有字符串类型的分类变量.我在线搜索并看到一些类似的问题,但没有一个真正解决我的问题.

使用scikit-learn处理分类功能

https://www.quora.com/If-the-training-dataset-has-more-variables-than-the-test-dataset-what-does-one-do

https://www.quora.com/What-is-the-best-way-to-do-a-binary-one-hot-one-of-K-coding-in-Python

python prediction dataframe scikit-learn dummy-variable

30
推荐指数
4
解决办法
2万
查看次数

ValueError:未知标签类型:'未知'

我尝试运行以下代码.顺便说一句,我是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,)目标值(分类中的类标签,回归中的实数)

我的错误是什么? …

python numpy pandas scikit-learn logistic-regression

30
推荐指数
2
解决办法
4万
查看次数