Python-實現多元線性迴歸算法

#!/usr/bin/env python
# coding: utf-8

# In[8]:


#下面是數據庫的一些操作
import pandas as pd
import pymysql
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from matplotlib import pyplot as plt
db = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='chuang199832', db='data', charset='utf8')
cursor = db.cursor()
cursor.execute("select version()")
data = cursor.fetchone()
print(" Database Version:%s" % data)
sql = "select * from data"
cursor.execute(sql)
data = cursor.fetchall()
df = pd.DataFrame(data)
df.columns=["Trust",'Quantity','Satisfied','Loyal']
df.head()


# In[10]:


#這一格可以忽略
xls = pd.ExcelFile('./datasets/data.xls')
print(pd.read_excel(xls))
#data = pd.read_excel(xls)


# In[11]:


#讀取數據
data = df
new_data = data.iloc[:,:4]
y = data.iloc[:,3]
print('head:',new_data.head(),'\nShape:',new_data.shape)
print('value:',y)


# In[12]:


#查看統計變量
print(new_data.describe())


# In[13]:


#三者均強相關,大於0.6就相關了
print(new_data.corr())


# In[67]:


#繪製相關性圖片,發現具有明顯的線性關係
sns.pairplot(new_data,x_vars = ['Trust','Quantity','Satisfied'],y_vars = 'Loyal',height=7, aspect=0.8,kind = 'reg')
plt.savefig('cor.jpg')
plt.show()


# In[14]:


#劃分訓練集和測試集
X_train,X_test,Y_train,Y_test = train_test_split(new_data.iloc[:,:3],new_data.Loyal,train_size=.80)
print("原始數據特徵:",new_data.iloc[:,:3].shape,    
      ",訓練數據特徵:",X_train.shape,      
      ",測試數據特徵:",X_test.shape)

print("原始數據標籤:",new_data.Loyal.shape,      
      ",訓練數據標籤:",Y_train.shape,      
      ",測試數據標籤:",Y_test.shape)


# In[15]:


#模型訓練及輸出結果
model = LinearRegression()
model.fit(X_train,Y_train)
a  = model.intercept_#截距
b = model.coef_#迴歸係數
print("最佳擬合線:截距",a,",迴歸係數:",b)


# In[16]:


#R方檢測,也就是誤差檢測的一種,R越高越好
score = model.score(X_test,Y_test)
print(score)
#輸出預測值
Y_pred = model.predict(X_test)
print(Y_pred)
plt.plot(range(len(Y_pred)),Y_pred,'b',label ="predict")


# In[17]:


#下面顯示預測數據和源數據對比圖
plt.plot(range(len(Y_pred)),Y_pred,'b',label="predict")
plt.plot(range(len(Y_pred)),Y_test,'r',label="test")
plt.legend(loc="upper right") #顯示圖中的標籤
plt.xlabel("the number of Loyal")
plt.ylabel('value of Loyal')
plt.savefig("ROC.jpg")
plt.show() 


# In[ ]:




示例截圖如下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章