【问题标题】:When switching from Scalar to PolynomialFeatures get an error从 Scalar 切换到 PolynomialFeatures 时出现错误
【发布时间】:2020-07-18 21:33:53
【问题描述】:

我正在尝试从使用 Scalar 切换到将我的数据转换为 quadratic.fit_transform

这是我的代码

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score, mean_squared_error
from sklearn.preprocessing import PolynomialFeatures

training_data = pd.read_csv("/Users/aus10/Desktop/PGA/History/Memorial/PGA_Training_data.csv")

test_data = pd.read_csv("/Users/aus10/Desktop/PGA/History/Memorial/PGA_Test_Data.csv")

X = training_data.iloc[:,1:4]  #independent columns
y = training_data.iloc[:,-1]   #target column

model = LinearRegression()

quadratic = PolynomialFeatures(degree=2)

X_quad = quadratic.fit_transform(X)

model.fit(X_quad,y)

results = []

index = 0
count = 0

while count < len(test_data):
    name = test_data.loc[index].at['Player_Name']
    Scrambling = test_data.loc[index].at['Scrambling']
    Total_Putts_GIR = test_data.loc[index].at['Total_Putts_GIR']
    SG_Putting = test_data.loc[index].at['SG_Putting']

    Xnew = [[ Scrambling, Total_Putts_GIR, SG_Putting ]]
    # make a prediction
    ynew = model.predict(Xnew)
    # show the inputs and predicted outputs
    results.append(
        {
            'Name': name,
            'Projection': (round(ynew[0],2))
        }
        )
    index += 1
    count += 1
sorted_results = sorted(results, key=lambda k: k['Projection'], reverse=True)

df = pd.DataFrame(sorted_results, columns=[
    'Name', 'Projection'])
writer = pd.ExcelWriter('/Users/aus10/Desktop/PGA/Regressions/Linear_Regressions/Results/Projections_LR_LL.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', index=False)
df.style.set_properties(**{'text-align': 'center'})
pd.set_option('display.max_colwidth', 100)
pd.set_option('display.width', 1000)
writer.save()

但是,当我运行它时,我得到一个错误提示

ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 10 is different from 3)

我还需要添加另一个步骤吗?不知道为什么它会改变我输入数据的大小。

【问题讨论】:

    标签: python machine-learning linear-regression


    【解决方案1】:
    import pandas as pd
    import numpy as np
    from sklearn.linear_model import LinearRegression
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import r2_score, mean_squared_error
    from sklearn.preprocessing import PolynomialFeatures
    from sklearn.pipeline import make_pipeline
    
    training_data = pd.read_csv("/Users/aus10/Desktop/PGA/History/Memorial/PGA_Training_data.csv")
    
    test_data = pd.read_csv("/Users/aus10/Desktop/PGA/History/Memorial/PGA_Test_Data.csv")
    
    X = training_data.iloc[:,1:4]  #independent columns
    y = training_data.iloc[:,-1]   #target column
    
    degree = 2 
    
    model=make_pipeline(PolynomialFeatures(degree), LinearRegression())
    
    model.fit(X,y)
    
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=2)
    
    y_train_pred = model.predict(X_train)
    y_test_pred = model.predict(X_test)
    
    model.fit(X_train, y_train)
    
    y_pred = model.predict(X_test)
    
    print('MSE train: %.3f, test: %.3f' % (
        round(mean_squared_error(y_train, y_train_pred),2),
        round(mean_squared_error(y_test, y_test_pred),2)
    ))
    
    print('R^2 train: %.3f, test: %.3f' % (r2_score(y_train, y_train_pred), r2_score(y_test, y_test_pred)))
    
    results = []
    
    index = 0
    count = 0
    
    while count < len(test_data):
        name = test_data.loc[index].at['Player_Name']
        Scrambling = test_data.loc[index].at['Scrambling']
        Total_Putts_GIR = test_data.loc[index].at['Total_Putts_GIR']
        SG_Putting = test_data.loc[index].at['SG_Putting']
    
        Xnew = [[ Scrambling, Total_Putts_GIR, SG_Putting ]]
        # make a prediction
        ynew = model.predict(Xnew)
        # show the inputs and predicted outputs
        results.append(
            {
                'Name': name,
                'Projection': (round(ynew[0],2))
            }
            )
        index += 1
        count += 1
    sorted_results = sorted(results, key=lambda k: k['Projection'], reverse=True)
    
    df = pd.DataFrame(sorted_results, columns=[
        'Name', 'Projection'])
    writer = pd.ExcelWriter('/Users/aus10/Desktop/PGA/Regressions/Linear_Regressions/Results/Projections_LR_LR.xlsx', engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    df.style.set_properties(**{'text-align': 'center'})
    pd.set_option('display.max_colwidth', 100)
    pd.set_option('display.width', 1000)
    writer.save()
    

    【讨论】:

      猜你喜欢
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 2016-09-25
      • 2012-04-19
      • 1970-01-01
      • 2014-12-14
      相关资源
      最近更新 更多