我尝试使用python进行线性回归
例如
STRUC NODE
.Value: resd 1 ;data field
.NextPtr: resd 1 ;next pointer field
.PrevPtr: resd 1 ;previous pointer field
.size:
ENDSTRUC
SECTION .data
Head: ISTRUC Node
AT Node.Value, dd 0
AT Node.NextPtr, dd Second
AT Node.PrevPtr, dd Tail
IEND
Second: ISTRUC Node
AT Node.Value, dd 0
AT Node.NextPtr, dd Tail
AT Node.PrevPtr, dd Head
IEND
Tail: ISTRUC Node
AT Node.Value, dd 0
AT Node.NextPtr, dd Head
AT Node.PrevPtr, dd Second
IEND
现在将example_data设为:
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
x = [[6, 2], [8, 1], [10, 0], [14, 2], [18, 0]]
y = [[7], [9], [13], [17.5], [18]]
model = LinearRegression()
model.fit(x, y)
x_test = [[8, 2]]
inches是一个清楚的数字,但面积不是。
如何将城市转换为数字进行计算?
如何将城市等参数分类为数字以进行计算?
答案 0 :(得分:0)
代码:
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
cities = ['A','B','C','B'] # for example
le.fit(cities)
cities = le.transform(cities)
print(cities)
输出:
[0,1,2,1]
答案 1 :(得分:0)
您将要使用pd.get_dummies()将每个城市转换为二进制值。标签编码器将为变量分配一个整数值,这将使解释回归公式变得困难,甚至可能会产生偏差。请记住删除一个虚拟变量,以避免多重共线性。
答案 2 :(得分:0)
从example_data
中显示的数据来看,您似乎正在使用熊猫DataFrame
中的数据。因此,我建议另一种可能的方法来回答您的问题
以下是我以与您相同的格式生成的一些数据,但有额外的行
d = [
['inches','city','Pizza_Price'],
[5,'A',10],
[6,'B',12],
[7,'C',15],
[8,'D',11],
[9,'B',12],
[10,'C',17],
[11,'D',16]
]
df = pd.DataFrame(d[1:], columns=d[0])
print(df)
inches city Pizza_Price
0 5 A 10
1 6 B 12
2 7 C 15
3 8 D 11
4 9 B 12
5 10 C 17
6 11 D 16
根据@ Wen-Ben的this SO post
,可以使用city
(如suggestion来将LabelEncoder
列转换为整数。
df['city'] = pd.DataFrame(columns=['city'],
data=LabelEncoder().fit_transform(
df['city'].values.flatten())
)
print(df)
inches city Pizza_Price
0 5 0 10
1 6 1 12
2 7 2 15
3 8 3 11
4 9 1 12
5 10 2 17
6 11 3 16
步骤1 。执行train-test split以获取训练和测试数据X_train
,y_train
等
features = ['inches', 'city']
target = 'Pizza_Price'
X = df[features]
y = df[target]
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.33,
random_state=42)
# (OPTIONAL) Check number of rows in X and y of each split
print(len(X_train), len(y_train))
print(len(X_test), len(y_test))
4 4
3 3
第2步。(可选)在源DataFrame
(example_data
)上附加一列,以显示在培训和测试中使用了哪些行
df['Type'] = 'Test'
df.loc[X_train.index, 'Type'] = 'Train'
第3步。实例化LinearRegression
模型并使用训练数据集训练模型-请参见sklearn
docs
model = LinearRegression()
model.fit(X_train, y_train)
第4步。现在,对测试数据进行样本外预测,并将预测值作为单独的列附加到example_data
NaN
df['Predicted_Pizza_Price'] = np.nan
df.loc[X_test.index, 'Predicted_Pizza_Price'] = model.predict(X_test)
print(df)
inches city Pizza_Price Type Predicted_Pizza_Price
0 5 0 10 Test 11.0
1 6 1 12 Test 11.8
2 7 2 15 Train NaN
3 8 3 11 Train NaN
4 9 1 12 Train NaN
5 10 2 17 Test 14.0
6 11 3 16 Train NaN
第5步。生成模型评估指标(请参见here中的第15点)
DataFrame
,其中同时显示(a)模型评估指标和(b)模型属性-线性回归系数和截距DataFrame
创建一个空白字典来保存模型属性(系数,截距)和评估指标
dict_summary = {}
追加系数并拦截到字典
for m,feature in enumerate(features):
dict_summary['Coefficient ({})' .format(feature)] = model.coef_[m]
dict_summary['Intercept'] = model.intercept_
将评估指标添加到字典
y_test = df.loc[X_test.index, 'Pizza_Price'].values
y_pred = df.loc[X_test.index, 'Predicted_Pizza_Price'].values
dict_summary['Mean Absolute Error (MAE)'] = metrics.mean_absolute_error(
y_test, y_pred)
dict_summary['Mean Squared Error (MSE)'] = metrics.mean_squared_error(
y_test, y_pred)
dict_summary['Root Mean Squared Error (RMSE)'] = np.sqrt(
metrics.mean_squared_error(y_test, y_pred)
)
将字典转换为摘要DataFrame
,其中显示了回归模型的属性和评估指标
df_metrics = pd.DataFrame.from_dict(dict_summary, orient='index', columns=['value'])
df_metrics.index.name = 'metric'
df_metrics.reset_index(drop=False, inplace=True)
模型评估DataFrame
的输出
print(df_metrics)
metric value
0 Coefficient (inches) 0.466667
1 Coefficient (city) 0.333333
2 Intercept 8.666667
3 Mean Absolute Error (MAE) 1.400000
4 Mean Squared Error (MSE) 3.346667
5 Root Mean Squared Error (RMSE) 1.829390
使用这种方法,因为您在Pandas 2 DataFrame
中获得了结果,所以Pandas工具可用于可视化回归分析的结果。