我想将一个由一系列元素组成的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来实现这一目标?
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.
我在.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中做到这一点?
我有一个包含亚马逊评论数据的相当大的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列时,它似乎工作正常.
任何帮助将不胜感激.
我正在尝试使用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
这是代码的粘贴: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) 我计算了我的多元线性回归方程,我希望看到调整后的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) 使用此作为垃圾邮件分类的模型时,我想添加主题和正文的附加功能.
我在熊猫数据框中拥有所有功能.例如,主题是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数据帧的分类变量进行一次编码,其中包括分类变量和连续变量.我意识到这可以通过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)
谁可以帮助我?我非常渴望工作管道,包括数据的预处理...提前谢谢!
我试图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
sklearn-pandas ×10
python ×9
scikit-learn ×8
pandas ×4
graphics ×1
k-means ×1
numpy ×1
pipeline ×1