使用scikit-learn执行线性回归时遇类型不兼容错误,求解决
scikit-learn线性回归建模时的数值类型兼容错误
问题背景
所用数据集包含R&D Spend、Administration、Marketing Spend、State、Profit字段,示例数据如下:
R&D Spend Administration Marketing Spend State Profit 0 165349.20 136897.80 471784.10 New York 192261.83 1 162597.70 151377.59 443898.53 California 191792.06 2 153441.51 101145.55 407934.54 Florida 191050.39 3 144372.41 118671.85 383199.62 New York 182901.99 4 142107.34 91391.77 366168.42 Florida 166187.94 5 131876.90 99814.71 362861.36 New York 156991.12 6 134615.46 147198.87 127716.82 California 156122.51 7 130298.13 145530.06 323876.68 Florida 155752.60 8 120542.52 148718.95 311613.29 New York 152211.77 9 123334.88 108679.17 304981.62 California 149759.96 10 101913.08 110594.11 229160.95 Florida 146121.95 11 100671.96 91790.61 249744.55 California 144259.40 12 93863.75 127320.38 249839.44 Florida 141585.52 13 91992.39 135495.07 252664.93 California 134307.35 14 119943.24 156547.42 256512.92 Florida 132602.65
编写的建模代码如下:
#Dataset dataset=pd.read_csv(r'50_Startups.csv') X=dataset.iloc[:,:-1] y=dataset.iloc[:,-1] #Encoding Categorical Data from sklearn.compose import ColumnTransformer from sklearn.preprocessing import OneHotEncoder oHe=OneHotEncoder() ct=ColumnTransformer(transformers=[('encoder',oHe,[3])],remainder='passthrough') X = np.array(ct.fit_transform(X), dtype = np.str) #Splitting into Training and Test sets from sklearn.model_selection import train_test_split X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=1) #Training the Multiple Linear Regression from sklearn.linear_model import LinearRegression regressor=LinearRegression() regressor.fit(X_train,y_train)
运行时触发错误:
ValueError: dtype='numeric' is not compatible with arrays of bytes/strings. Convert your data to numeric values explicitly instead.
错误原因
代码中强制将ColumnTransformer处理后的特征矩阵转换为字符串类型(dtype = np.str),而线性回归模型要求输入特征必须是数值型数据,因此出现类型不兼容的报错。
解决方法
去掉强制转换为字符串的操作,直接保留ColumnTransformer输出的数值型矩阵即可。如果需要转换为numpy数组,无需指定字符串类型。
修改后的核心代码行:
X = ct.fit_transform(X) # 或者如果需要numpy数组: # X = np.array(ct.fit_transform(X))
完整修改后的代码:
#Dataset import pandas as pd import numpy as np dataset=pd.read_csv(r'50_Startups.csv') X=dataset.iloc[:,:-1] y=dataset.iloc[:,-1] #Encoding Categorical Data from sklearn.compose import ColumnTransformer from sklearn.preprocessing import OneHotEncoder oHe=OneHotEncoder() ct=ColumnTransformer(transformers=[('encoder',oHe,[3])],remainder='passthrough') X = ct.fit_transform(X) #Splitting into Training and Test sets from sklearn.model_selection import train_test_split X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=1) #Training the Multiple Linear Regression from sklearn.linear_model import LinearRegression regressor=LinearRegression() regressor.fit(X_train,y_train)
内容的提问来源于stack exchange,提问作者Yajulu
相关产品推荐
相关产品推荐

