标签: sklearn-pandas

如何从包含列表的pandas列进行单热编码?

我想将一个由一系列元素组成的pandas列分解为多个列,因为它们具有唯一的元素,即one-hot-encode它们(其值1表示存在于行0中的给定元素,在缺少的情况下).

例如,采用数据帧df

Col1   Col2         Col3
 C      33     [Apple, Orange, Banana]
 A      2.5    [Apple, Grape]
 B      42     [Banana] 
Run Code Online (Sandbox Code Playgroud)

我想将其转换为:

DF

Col1   Col2   Apple   Orange   Banana   Grape
 C      33     1        1        1       0
 A      2.5    1        0        0       1
 B      42     0        0        1       0
Run Code Online (Sandbox Code Playgroud)

我如何使用pandas/sklearn来实现这一目标?

python numpy pandas scikit-learn sklearn-pandas

47
推荐指数
6
解决办法
1万
查看次数

Sklearn plot_tree plot is too small

I have this simple code:

clf = tree.DecisionTreeClassifier()
clf = clf.fit(X, y)

tree.plot_tree(clf.fit(X, y))
plt.show()
Run Code Online (Sandbox Code Playgroud)

And the result I get is this graph: 在此处输入图片说明

How do I make this graph legible? I'm using PyCharm Professional 2019.3 as my IDE.

python graphics sklearn-pandas

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

Scikit中的多变量/多元线性回归学习?

我在.csv文件中有一个数据集(dataTrain.csv和dataTest.csv),格式如下:

Temperature(K),Pressure(ATM),CompressibilityFactor(Z)
273.1,24.675,0.806677258
313.1,24.675,0.888394713
...,...,...
Run Code Online (Sandbox Code Playgroud)

并且能够使用以下代码构建回归模型和预测:

import pandas as pd
from sklearn import linear_model

dataTrain = pd.read_csv("dataTrain.csv")
dataTest = pd.read_csv("dataTest.csv")
# print df.head()

x_train = dataTrain['Temperature(K)'].reshape(-1,1)
y_train = dataTrain['CompressibilityFactor(Z)']

x_test = dataTest['Temperature(K)'].reshape(-1,1)
y_test = dataTest['CompressibilityFactor(Z)']

ols = linear_model.LinearRegression()
model = ols.fit(x_train, y_train)

print model.predict(x_test)[0:5]
Run Code Online (Sandbox Code Playgroud)

但是,我想要做的是多元回归.所以,模型将是CompressibilityFactor(Z) = intercept + coef*Temperature(K) + coef*Pressure(ATM)

如何在scikit-learn中做到这一点?

python pandas scikit-learn sklearn-pandas

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

基于列的sklearn分层抽样

我有一个包含亚马逊评论数据的相当大的CSV文件,我将其读入大熊猫数据框.我想将数据分成80-20(训练测试),但在这样做时我想确保分割数据按比例代表一列(类别)的值,即所有不同类别的评论都存在于列车中并按比例测试数据.

数据如下所示:

**ReviewerID**       **ReviewText**        **Categories**       **ProductId**

1212                   good product         Mobile               14444425
1233                   will buy again       drugs                324532
5432                   not recomended       dvd                  789654123 
Run Code Online (Sandbox Code Playgroud)

我使用以下代码来执行此操作:

import pandas as pd
Meta = pd.read_csv('C:\\Users\\xyz\\Desktop\\WM Project\\Joined.csv')
import numpy as np
from sklearn.cross_validation import train_test_split

train, test = train_test_split(Meta.categories, test_size = 0.2, stratify=y)
Run Code Online (Sandbox Code Playgroud)

它给出了以下错误

NameError: name 'y' is not defined
Run Code Online (Sandbox Code Playgroud)

因为我对python相对较新,所以我无法弄清楚我做错了什么,或者这个代码是否会根据列类别进行分层.当我从train-test split中删除了stratify选项以及categories列时,它似乎工作正常.

任何帮助将不胜感激.

python pandas scikit-learn sklearn-pandas

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

Scikit K-means聚类性能测量

我正在尝试使用K-means方法进行聚类,但我想测量聚类的性能.我不是专家,但我渴望了解有关群集的更多信息.

这是我的代码:

import pandas as pd
from sklearn import datasets

#loading the dataset
iris = datasets.load_iris()
df = pd.DataFrame(iris.data)

#K-Means
from sklearn import cluster
k_means = cluster.KMeans(n_clusters=3)
k_means.fit(df) #K-means training
y_pred = k_means.predict(df)

#We store the K-means results in a dataframe
pred = pd.DataFrame(y_pred)
pred.columns = ['Species']

#we merge this dataframe with df
prediction = pd.concat([df,pred], axis = 1)

#We store the clusters
clus0 = prediction.loc[prediction.Species == 0]
clus1 = prediction.loc[prediction.Species == 1]
clus2 = prediction.loc[prediction.Species == 2]
k_list = …
Run Code Online (Sandbox Code Playgroud)

python cluster-analysis machine-learning scikit-learn sklearn-pandas

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

Sklearn SVM:SVR和SVC,为每个输入获得相同的预测

这是代码的粘贴:SVM示例代码

我查看了这个问题的几个其他答案......似乎问题的这个特定迭代有点不同.

首先,我的输入被标准化,我每点有五个输入.这些值都是合理的大小(健康的0.5s和0.7s等 - 很少接近零或接近1个数字).

我有大约70个输入对应于他们的70 y输入.y输入也被标准化(它们是每个时间步之后我的函数的百分比变化).

我初始化我的SVR(和SVC),训练它们,然后用30个样本外输入测试它们......并获得每个输入的完全相同的预测(并且输入正在以合理的量变化 - 0.3,0.6 ,0.5等).我认为分类器(至少)会有一些区别......

这是我得到的代码:

# train svr

my_svr = svm.SVR()
my_svr.fit(x_training,y_trainr)

# train svc

my_svc = svm.SVC()
my_svc.fit(x_training,y_trainc)


# predict regression

p_regression = my_svr.predict(x_test)
p_r_series = pd.Series(index=y_testing.index,data=p_regression)

# predict classification

p_classification = my_svc.predict(x_test)
p_c_series = pd.Series(index=y_testing_classification.index,data=p_classification)
Run Code Online (Sandbox Code Playgroud)

以下是我输入的示例:

x_training = [[  1.52068627e-04   8.66880301e-01   5.08504362e-01   9.48082047e-01
7.01156322e-01],
              [  6.68130520e-01   9.07506250e-01   5.07182647e-01   8.11290634e-01
6.67756208e-01],
              ... x 70 ]

y_trainr = [-0.00723209 -0.01788079  0.00741741 -0.00200805 -0.00737761  0.00202704 ...]

y_trainc = [ 0.  0.  1.  0. …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn sklearn-pandas

11
推荐指数
1
解决办法
6601
查看次数

python sklearn多元线性回归显示r平方

我计算了我的多元线性回归方程,我希望看到调整后的R平方.我知道得分函数可以让我看到r平方,但它没有调整.

import pandas as pd #import the pandas module
import numpy as np
df = pd.read_csv ('/Users/jeangelj/Documents/training/linexdata.csv', sep=',')
df
       AverageNumberofTickets   NumberofEmployees   ValueofContract Industry
   0              1                    51                  25750    Retail
   1              9                    68                  25000    Services
   2             20                    67                  40000    Services
   3              1                   124                  35000    Retail
   4              8                   124                  25000    Manufacturing
   5             30                   134                  50000    Services
   6             20                   157                  48000    Retail
   7              8                   190                  32000    Retail
   8             20                   205                  70000    Retail
   9             50                   230                  75000    Manufacturing
  10             35                   265                  50000    Manufacturing
  11             65 …
Run Code Online (Sandbox Code Playgroud)

python machine-learning sklearn-pandas

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

在scikit中使用Featureunion - 学习将两个pandas列合并为tfidf

使用作为垃圾邮件分类的模型时,我想添加主题和正文的附加功能.

我在熊猫数据框中拥有所有功能.例如,主题是df ['Subject'],正文是df ['body_text'],垃圾邮件/火腿标签是df ['ham/spam']

我收到以下错误:TypeError:'FeatureUnion'对象不可迭代

如何通过管道功能运行df ['Subject']和df ['body_text']作为功能?

from sklearn.pipeline import FeatureUnion
features = df[['Subject', 'body_text']].values
combined_2 = FeatureUnion(list(features))

pipeline = Pipeline([
('count_vectorizer',  CountVectorizer(ngram_range=(1, 2))),
('tfidf_transformer',  TfidfTransformer()),
('classifier',  MultinomialNB())])

pipeline.fit(combined_2, df['ham/spam'])

k_fold = KFold(n=len(df), n_folds=6)
scores = []
confusion = numpy.array([[0, 0], [0, 0]])
for train_indices, test_indices in k_fold:
    train_text = combined_2.iloc[train_indices]
    train_y = df.iloc[test_indices]['ham/spam'].values

    test_text = combined_2.iloc[test_indices]
    test_y = df.iloc[test_indices]['ham/spam'].values

    pipeline.fit(train_text, train_y)
    predictions = pipeline.predict(test_text)
    prediction_prob = pipeline.predict_proba(test_text)

    confusion += confusion_matrix(test_y, predictions)
    score = f1_score(test_y, predictions, …
Run Code Online (Sandbox Code Playgroud)

pandas scikit-learn sklearn-pandas

10
推荐指数
1
解决办法
5994
查看次数

如何在Sklearn管道中进行Onehotencoding

我正在尝试对我的Pandas数据帧的分类变量进行一次编码,其中包括分类变量和连续变量.我意识到这可以通过pandas .get_dummies()函数轻松完成,但我需要使用管道,以便稍后我可以生成PMML文件.

这是创建映射器的代码.我想编码的分类变量存储在名为"dummies"的列表中.

from sklearn_pandas import DataFrameMapper
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelEncoder

mapper = DataFrameMapper(
    [(d, LabelEncoder()) for d in dummies] +
    [(d, OneHotEncoder()) for d in dummies]
)
Run Code Online (Sandbox Code Playgroud)

这是创建管道的代码,包括映射器和线性回归.

from sklearn2pmml import PMMLPipeline
from sklearn.linear_model import LinearRegression

lm = PMMLPipeline([("mapper", mapper),
                   ("regressor", LinearRegression())])
Run Code Online (Sandbox Code Playgroud)

当我现在尝试拟合('features'是一个数据帧,并''目标'一系列)时,它会给出一个错误'无法将字符串转换为浮点数'.

lm.fit(features, targets)
Run Code Online (Sandbox Code Playgroud)

谁可以帮助我?我非常渴望工作管道,包括数据的预处理...提前谢谢!

python pipeline scikit-learn sklearn-pandas

10
推荐指数
1
解决办法
5434
查看次数

使用具有余弦相似性的K-means - Python


我试图Kmeans在python中实现算法,它将使用cosine distance而不是欧几里德距离作为距离度量.
我知道使用不同的距离函数可能是致命的,应该仔细进行.使用余弦距离作为度量迫使我改变平均函数(根据余弦距离的平均值必须是归一化向量的元素平均值的元素).

我已经看到了这种手动覆盖sklearn的距离函数的优雅解决方案,我想使用相同的技术来覆盖代码的平均部分,但我找不到它.

有谁知道怎么做?
距离度量不满足三角不等式有多重要?
如果有人知道kmeans的不同有效实现,我使用余弦度量或满足距离和平均函数,它也将是真正有用的.
非常感谢你!

编辑:
使用角距离而不是余弦距离后,代码看起来像这样:

def KMeans_cosine_fit(sparse_data, nclust = 10, njobs=-1, randomstate=None):
    # Manually override euclidean
    def euc_dist(X, Y = None, Y_norm_squared = None, squared = False):
        #return pairwise_distances(X, Y, metric = 'cosine', n_jobs = 10)
        return np.arccos(cosine_similarity(X, Y))/np.pi
    k_means_.euclidean_distances = euc_dist
    kmeans = k_means_.KMeans(n_clusters = nclust, n_jobs = njobs, random_state = randomstate)
    _ = kmeans.fit(sparse_data)
    return kmeans
Run Code Online (Sandbox Code Playgroud)

我注意到(通过数学计算)如果向量被归一化,则标准平均值适用于角度量.据我了解,我必须改变_mini_batch_step()k_means_.py.但功能非常复杂,我无法理解如何做到这一点.
有谁知道替代解决方案?
或许,有没有人知道我怎么能用一个总是迫使质心标准化的功能来编辑这个功能?

python k-means cosine-similarity scikit-learn sklearn-pandas

10
推荐指数
3
解决办法
6991
查看次数