Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';t计算梯度下降线性回归_Python_Linear Regression_Gradient_Gradient Descent - Fatal编程技术网

Python Can';t计算梯度下降线性回归

Python Can';t计算梯度下降线性回归,python,linear-regression,gradient,gradient-descent,Python,Linear Regression,Gradient,Gradient Descent,我目前正在从事梯度下降项目 我选择nba统计数据作为我的数据,所以我从basketball reference下载了3Pts数据和pts数据,并成功绘制了散点图。然而,结果似乎并不正确 我的散点图正朝着右上(因为3分越多通常意味着得分越多,所以这是有意义的) 但我的梯度下降线是向左上的,我不知道怎么了 import pandas as pd import numpy as np from sklearn import linear_model from matplotlib import pyp

我目前正在从事梯度下降项目

我选择nba统计数据作为我的数据,所以我从basketball reference下载了3Pts数据和pts数据,并成功绘制了散点图。然而,结果似乎并不正确

我的散点图正朝着右上(因为3分越多通常意味着得分越多,所以这是有意义的)

但我的梯度下降线是向左上的,我不知道怎么了

import pandas as pd
import numpy as np
from sklearn import linear_model
from matplotlib import pyplot as plt


data = pd.read_csv('C:/Users/jeehw/Documents/FG3M_PTS_2021.csv')


X = data.iloc[:,1]
Y = data.iloc[:,2]

plt.figure(figsize=(8,6))
plt.xlabel('FG3M')                                  
plt.ylabel('PTS')
plt.scatter(X,Y)
plt.show()

m = 0
c = 0

L = 0.001
epochs = 200

n = float(len(X))

for i in range(len(X)):
Y_pred = m*X + c
m_Grad = (1/n) * sum(X * (Y_pred - Y))
c_Grad = (1/n) * sum(Y_pred - Y)


m = m - L* m_Grad
c = c - L* c_Grad

Y_pred = m*X + c

plt.scatter(X, Y)
plt.scatter(X, Y_pred)
plt.show()

这段代码中的一些东西没有真正意义。你想从头开始做回归吗?因为你确实需要学习,但从不应用它。您可以参考此链接了解如何使用scikit学习回归。我也会考虑和其他算法一起玩。

我相信这就是你在这里要做的:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn import linear_model
from sklearn.metrics import mean_squared_error, r2_score
from matplotlib import pyplot as plt


#data = pd.read_csv('C:/Users/jeehw/Documents/FG3M_PTS_2021.csv')
raw_data = pd.read_html('https://www.basketball-reference.com/leagues/NBA_2021_totals.html')[0]
raw_data  = raw_data[raw_data['Rk'].ne('Rk')]

data = raw_data[['Player','3P','PTS']]
data[['3P','PTS']] = data[['3P','PTS']].astype(int)

X = data.iloc[:]['3P'].values
y = data.iloc[:]['PTS'].values

plt.figure(figsize=(8,6))
plt.xlabel('FG3M')                                  
plt.ylabel('PTS')
plt.scatter(X,y)

plt.xticks(np.arange(min(X), max(X)+1, 20))
plt.yticks(np.arange(min(y), max(y)+1, 100))
plt.show()


# Split data into test and Train
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42)

# Create linear regression object
regr = linear_model.LinearRegression()

# Train the model using the training sets
regr.fit(X_train.reshape(-1, 1), y_train)

# Make predictions using the testing set
y_pred = regr.predict(X_test.reshape(-1, 1))



# The coefficients
print('Coefficients: \n', regr.coef_)
# The mean squared error
print('Mean squared error: %.2f'
      % mean_squared_error(y_test, y_pred))
# The coefficient of determination: 1 is perfect prediction
print('Coefficient of determination: %.2f'
      % r2_score(y_test, y_pred))

# Plot outputs
plt.scatter(X_test, y_test,  color='black')
plt.plot(X_test, y_pred, color='red', linewidth=3)

plt.xticks(np.arange(min(X_test), max(X_test)+1, 20))
plt.yticks(np.arange(min(y_pred), max(y_pred)+1, 100))

plt.xlabel('FG3M')                                  
plt.ylabel('PTS')

plt.show()


那里有一些噪音。你有很多球员得分很多,他们从来没有投过三分球,更不用说一分了。所以我会考虑先做大量的数据清理工作。(可能只考虑至少尝试过50次3分的球员?或者去掉中锋?如果球员换了球队,他们可能会在数据集中出现几次,每个球队的总数都是这样的,所以有一些冗余…但我不会花时间去清理,因为这超出了问题的范围)。我也会测试其他机器学习算法。但上面的代码至少会让你去玩。玩得开心!

这些数据是公开的吗?如果没有这些数据,很难提供帮助。我认为OP需要首先澄清缩进。for循环是没有用的,因为它只是一部分。事实上,你可以从basketba下载ll参考。转到2021年nba赛季球员统计数据,并按下午3点的数字排序球员(最多从下午3点到最少)我修改了表格(表格顶部有一个函数)我只留下了下午3点、点和名字。然后我没有把它加载到CSV文件中。我不知道如何在这里附加文件……我可以我会在这里附加文件。你说的OP和缩进是什么意思?我对这个领域真的很陌生,所以我很迷茫。你能进一步澄清一下吗?谢谢!OP=原始海报;你的for循环没有缩进。有什么问题吗在循环中需要缩进(基本python语法)哦,我的天啊……非常感谢!这正是我想要的。是的!我使用了你剩下的代码,但用我的CSV文件替换了数据。本赛季我只从至少100 FG3M的球员那里收集数据来筛选球员。所以我得到了106名球员。再次感谢你。希望我能很快变得更好,并且想要帮助像你这样的人!我能问一个问题吗?这样我就能理解训练/测试MSE了。但是(X,y,测试大小=0.20,随机状态=42)是什么随机状态42和测试大小0.2意味着?测试大小=.20意味着训练和测试数据集被分为80%和20%。经验法则是你通常希望有大约70-80%的训练。因此你可以更改测试集=.3随机状态的设置,这样当你再次进行分割时,它会给你相同的分割。你可以将它设置为任何旧的数字。但是让我们假设一下例如,你想在逻辑回归中测试两个不同的参数,看看改变它是否会提高性能/预测。你想在相同的训练集和测试集上尝试,否则你不知道这两个性能的差异是否是由于参数改变,或者只是碰巧你得到了一个更好的训练ng split。因此,通过设置一个随机_状态,您每次基本上都会重新创建相同的分割。