我试图对数据集进行线性回归,收集几个公寓的表面和租金。
下面是Python中显示的数据集示例:Dataset
我们模型的形式是:
y^=xT.θ,其中:xT=(x1,x2,x3,...,xN),y^T=(y1^,y2^,y3^,...,yN ^)
在我们的案例中:xTi=(1,vi1),其中vi1 =第i个单元的表面,因此我们有:yi^=xTiθ=θ0 + θ1×vi1
然后我们定义了模型的经验风险:E= Σ Ni=1|| xTiθ−yi|| 2我们试图找到使E最小化的θ:θ^=argminθE
要使用Python实现这一点,本课程使用以下代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
house_data = pd.read_csv('house.csv')
X = np.matrix([np.ones(house_data.shape[0]), house_data['surface'].values]).T
y = np.matrix(house_data['loyer']).T
theta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
print(theta)
字符串
课程给出的X的解决方案是使用np.matrix(),但我试图使用np.arrays()来获得X的等价物:
此问题基于名为“Get Started with Machine Learning”的OpenClassrooms类https://openclassrooms.com/fr/courses/4011851-initiez-vous-au-machine-learning/4121986-programmez-votre-premiere-regression-lineaire
为了有一个X的等价物,我使用了以下代码行:
x = house_data['surface']
for i in range(len(x)):
A = [1,x[i]]
X.append(A)
型
我不能解释为什么,但它在11个第一次迭代中工作,然后它返回一个KeyError:11
有人可以解释一下KeyError:11是并且是否可能使用np.array()来获得X的表达式?
下面是我的代码的全部:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
house_data = pd.read_csv('house.csv')
house_data = house_data[house_data['loyer']<10000]
x = house_data['surface']
y = house_data['loyer']
X = []
for i in range(len(x)):
A = [1,x[i]]
X.append(A)
型
下面是print(x):x的
1条答案
按热度按时间blmhpbnm1#
你能在你的问题中发布更多的代码吗?
我试了一下,效果很好:
字符串
因此,解决你的问题的一个方法是这样做:
型
然而,这并没有回答你的问题:你为什么要得到
KeyError
?答案是pandas dataframe不是按 position 索引的,而是按dataframe的 index 列索引。默认情况下,dataframe的索引列与position一样开始,但执行的操作与行相同
型
您最终可能会消除数据框架的行并因此丢弃索引值。要了解发生了什么,请考虑以下示例:
型
这里有一个
KeyError
,因为small_house_data2
没有索引值1
。有两种基本方法可以解决这个问题:在您选择了
loyer
小于10000
的点之后,重置house_data
Dataframe 上的索引,或者在for
循环中迭代 Dataframe 的实际索引而不是范围。那就是:
型
或者是
型