機器學習第一篇 線性回歸

數據集:公開的World Happiness Report | Kaggle中的happiness dataset2017.

目標:基于GDP值預測幸福指數。(單特征預測)

代碼:

文件一:prepare_for_traning.py

"""用于科學計算的一個庫,提供了多維數組對象以及操作函數"""
from utils.features import prepare_for_training
"""數據預處理的一個私庫"""class LinearRegression:def __init__(self,data,labels,polynomial_degree = 0,sinusoid_degree = 0,normalize_data = True):"""進行預處理操作:param data::param labels::param polynomial_degree::param sinusoid_degree::param normalize_data:"""(data_processed,features_mean,features_deviation) = prepare_for_training(data,polynomial_degree = 0,sinusoid_degree = 0,normalize_data = True)self.data = data_processedself.labels = labelsself.features_mean = features_meanself.features_deviation = features_deviationself.polynomial_degree = polynomial_degreeself.sinusoid_degree = sinusoid_degreeself.normalize_data = normalize_datanum_features = self.data.shape[1]self.theta = np.zeros((num_features,1))""""數據,學習率,訓練次數"""def train(self,alpha,num_iterations = 500):"""訓練模塊:梯度下降"""cost_history = self.gradient_descent(alpha,num_iterations)return self.theta,cost_historydef gradient_descent(self,alpha,num_iterations):"""迭代模塊"""cost_history = []for _ in range(num_iterations):self.gradient_step(alpha)cost_history.append(self.cost_function(self.data,self.labels))return cost_historydef gradient_step(self,alpha):"""梯度下降參數更新算法,矩陣計算,使用小批量梯度下降算法:param self::param alpha::return:"""num_examples = self.data.shape[0]prediction = LinearRegression.hypothesis(self.data,self.theta)delta = prediction - self.labelstheta = self.thetatheta = theta - alpha*(1/num_examples)*(np.dot(delta.T,self.data)).Tself.theta = thetadef cost_function(self,data,labels):"""損失計算模塊:param self::param data::param labels::return:"""num_examples = data.shape[0]delta = LinearRegression.hypothesis(self.data,self.theta) - labelscost = (1/2)*np.dot(delta.T,delta)/num_examples"""print(cost.shape)"""return cost[0][0]"""裝飾器"""@staticmethoddef hypothesis(data,theta):prediction = np.dot(data,theta)return predictiondef get_cost(self,data,labels):data_processed = prepare_for_training(data,self.polynomial_degree,self.sinusoid_degree,self.normalize_data)[0]return self.cost_function(data_processed,labels)def predict(self,data):data_processed = prepare_for_training(data,self.polynomial_degree,self.sinusoid_degree,self.normalize_data)[0]predictions = LinearRegression.hypothesis(data_processed,self.theta)return predictions

文件2:Linear_regression.py?

import numpy as np
"""用于科學計算的一個庫,提供了多維數組對象以及操作函數"""
import pandas as pd
"""一個用于數據導入、導出、清洗和分析的庫,本文中導入csv格式數據等等"""
import matplotlib.pyplot as plt
"""pyplot提供了繪圖接口"""
import matplotlib
"""一個強大的繪圖庫"""# 設置matplotlib正常顯示中文和負號
matplotlib.rcParams['font.family'] = 'SimHei'  # 指定默認字體為黑體
matplotlib.rcParams['axes.unicode_minus'] = False  # 正確顯示負號from prepare_for_training import LinearRegressiondata = pd.read_csv("D:/machine_learning/archive/2017.csv")
train_data = data.sample(frac = 0.8)
test_data = data.drop(train_data.index)input_param_name = 'Economy..GDP.per.Capita.'
output_param_name = 'Happiness.Score'x_train = train_data[[input_param_name]].values
y_train = train_data[[output_param_name]].valuesx_test = test_data[[input_param_name]].values
y_test = test_data[[output_param_name]].valuesplt.scatter(x_train,y_train,label ='Train data')
plt.scatter(x_test,y_test,label ='Test data')
plt.xlabel(input_param_name)
plt.ylabel(output_param_name)
plt.title('Happy')
plt.legend()
plt.show()"""訓練次數,學習率"""
num_iterations = 500
learning_rate = 0.01linear_regression = LinearRegression(x_train,y_train)
(theta,cost_history) = linear_regression.train(learning_rate,num_iterations)
print('開始時的損失',cost_history[0])
print('訓練后的損失',cost_history[-1])plt.plot(range(num_iterations),cost_history)
plt.xlabel('Iter')
plt.ylabel('cost')
plt.title('損失值')
plt.show()predictions_num = 100
x_predictions = np.linspace(x_train.min(),x_train.max(),predictions_num).reshape(predictions_num,1)
y_predictions = linear_regression.predict(x_predictions)plt.scatter(x_train,y_train,label ='Train data')
plt.scatter(x_test,y_test,label ='Test data')
plt.plot(x_predictions,y_predictions,'r',label = 'Prediction')
plt.xlabel(input_param_name)
plt.ylabel(output_param_name)
plt.title('Happy')
plt.legend()
plt.show()效果圖:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78363.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78363.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78363.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java面試高頻問題(29-30)

二十九、全鏈路壓測:數據隔離與流量 關鍵技術點 1. 流量染色:通過Header注入X-Test-TraceId標識壓測流量 2. 影子庫表:通過ShardingSphere實現數據隔離 3. 熔斷降級:壓測流量觸發異常時自動切換回生產數據源 數據隔離方案對比 …

Python常用的第三方模塊之數據分析【pdfplumber庫、Numpy庫、Pandas庫、Matplotlib庫】

【pdfplumber庫】從PDF文件中讀取內容 import pdfplumber #打開PDF文件 with pdfplumber.open(DeepSeek從入門到精通(20250204).pdf) as pdf:for i in pdf.pages: #遍歷頁print(i.extract_text()) #extract_text()方法提取內容print(f----------------第{i.page_number}頁結束…

長短板理論——AI與思維模型【83】

一、定義 長短板理論思維模型,也被稱為木桶原理,是指一只木桶能盛多少水,并不取決于最長的那塊木板,而是取決于最短的那塊木板。該理論將木桶視為一個整體系統,各個木板代表著系統的不同組成部分或要素,強…

2025藍橋省賽c++B組第二場題解

前言 這場的題目非常的簡單啊,至于為什么有第二場,因為當時河北正在刮大風被迫停止了QwQ,個人感覺是歷年來最簡單的一場,如果有什么不足之處,還望補充。 試題 A: 密密擺放 【問題描述】 小藍有一個大箱子&#xff0…

【數據結構與算法】從完全二叉樹到堆再到優先隊列

完全二叉樹 CBT 設二叉樹的深度為 h , 若非最底層的其他各層的節點數都達到最大個數 , 最底層 h 的所有節點都連續集中在左側的二叉樹叫做 完全二叉樹 . 特點 對任意節點 , 其右分支下的葉子節點的最底層為 L , 則其左分支下的葉子節點的最低層一定是 L 或 L 1 .完全二叉樹…

Leetcode:1. 兩數之和

題目 給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標值 target 的那 兩個 整數,并返回它們的數組下標。 你可以假設每種輸入只會對應一個答案,并且你不能使用兩次相同的元素。 你可以按任意順序返回答案。 示…

flume整合kafka

需求一: 啟動flume 啟動kafka消費者,驗證數據寫入成功 新增測試數據 需求二: 啟動Kafka生產者 啟動Flume 在生產者中寫入數據

Hbase集群管理與實踐

一、HBase集群搭建實戰 1.1 環境規劃建議 硬件配置基準(以10節點集群為例): 角色CPU內存磁盤網絡HMaster4核16GBSSD 200GB(系統盤)10GbpsRegionServer16核64GB124TB HDD(JBOD)25GbpsZooKeeper4核8GBSSD 500GB10Gbps1.2 關鍵配置項示例(hbase-site.xml) <configu…

STM32 開發 - stm32f10x.h 頭文件(內存映射、寄存器結構體與宏、寄存器位定義、實現點燈案例)

概述 STM32F10x.h 是 STM32F1 系列微控制器的核心頭文件&#xff0c;提供了所有外設寄存器的定義和內存映射 一、內存映射 #define PERIPH_BASE ((uint32_t)0x40000000)#define APB1PERIPH_BASE PERIPH_BASE #define APB2PERIPH_BASE (PERIPH_BASE 0x…

QEMU源碼全解析 —— 塊設備虛擬化(23)

接前一篇文章:QEMU源碼全解析 —— 塊設備虛擬化(22) 本文內容參考: 《趣談Linux操作系統》 —— 劉超,極客時間 《QEMU/KVM源碼解析與應用》 —— 李強,機械工業出版社 特此致謝! QEMU啟動過程中的塊設備虛擬化 上一回解析了qcow2格式對應的qcow2_open函數,本回解…

【PCB工藝】推挽電路及交越失真

推挽電路(Push-Pull Circuit) 推挽電路(Push-Pull Circuit) 是一種常用于功率放大、電機驅動、音頻放大等場合的電路結構,具有輸出對稱、效率高、失真小等優點。 什么是推挽電路? 推挽是指:由兩種極性相反的器件(如 NPN 和 PNP、NMOS 和 PMOS)交替導通,一個“推”電…

RD電子實驗記錄本選用貼士A-B-C

傳統的實驗記錄本&#xff0c;令人又愛又恨本 如何挑選電子實驗室記錄本&#xff08;ELN&#xff09;的品牌/服務商/供應商&#xff1f; 電子實驗記錄本&#xff0c;又名為ELN&#xff0c;Electronic lab notebook&#xff0c;enotebook&#xff0c;研發電子管理系統&#xf…

Qt實戰之將自定義插件(minGW)顯示到Qt Creator列表的方法

Qt以其強大的跨平臺特性和豐富的功能&#xff0c;成為眾多開發者構建圖形用戶界面&#xff08;GUI&#xff09;應用程序的首選框架。而在Qt開發的過程中&#xff0c;自定義插件能夠極大地拓展應用程序的功能邊界&#xff0c;讓開發者實現各種獨特的、個性化的交互效果。想象一下…

java基礎之枚舉和注解

枚舉 簡介 枚舉&#xff1a;enumeration&#xff0c;jdk1.5中引入的新特性&#xff0c;用于管理和使用常量 入門案例 第一步&#xff1a;定義枚舉&#xff0c;這里定義一個動物類&#xff0c;里面枚舉了多種動物 public enum AnimalEnum {CAT, // 貓DOG, // 狗PIG // …

2.3java運算符

運算符 1. 算術運算符 算術運算符用于執行基本的數學運算&#xff0c;像加、減、乘、除等。 運算符描述示例加法int a 5 3; // a 的值為 8-減法int b 5 - 3; // b 的值為 2*乘法int c 5 * 3; // c 的值為 15/除法int d 6 / 3; // d 的值為 2%取模&#xff08;取余&…

升級 Spring Boot CLI

&#x1f31f; 升級 Spring Boot CLI 1?? &#x1f504; 通過包管理器升級 使用對應包管理器命令&#xff08;如 brew upgrade&#xff09; 2?? &#x1f4e5; 手動安裝升級 遵循 標準安裝說明 注意更新 PATH 環境變量移除舊版本路徑 &#x1f517; 鏈接原文&#xff1a…

如何輕松將RS232轉為Profibus DP,提升PLC效率?

如何輕松將RS232轉為Profibus DP&#xff0c;提升PLC效率&#xff1f; 今天&#xff0c;我們就來聊聊一個工業自動化中常見的應用場景&#xff1a;如何通過興達易控RS232轉Profibus DP網關&#xff0c;實現流量泵與PLC&#xff08;可編程邏輯控制器&#xff09;的通信。這個話…

QT 連接數據庫操作(15)

文章目錄 一、本章說明二、QT連接云端數據庫實現2.1 ODBC軟件安裝及參數設置2.2 軟件代碼實現三、項目源碼文件一、本章說明 注:本節為【基于STM的環境監測系統(節點+云服務器存儲+QT界面設計)】項目第15篇文章,前面已經創建了監測軟件的登錄窗口,接下來我們將在主窗口實…

linux系統之----命令行參數和環境變量

一、命令行參數 1.main()函數的參數 在C語言中&#xff0c;main函數可以接收命令行參數&#xff0c;其標準形式為&#xff1a; int main(int argc, char *argv[]) {// 程序代碼return 0; } 這里我們解釋一下&#xff1a; argc&#xff1a;參數個數計數器&#xff08;Argum…

解析excel中的圖片

解析excel中的圖片 前言一、pom依賴二、使用步驟1.示例數據2.代碼如下&#xff08;示例&#xff09;&#xff1a; 總結 前言 初始化數據是&#xff0c;需要將excel中的數據解析并插入數據庫。 但是某幾列存放的是圖片&#xff0c;這時候怎么辦呢。 主要解決的是&#xff1a;獲…