很多業務場景中,我們希望通過一個特定的函數來擬合業務數據,以此來預測未來數據的變化趨勢。(比如用戶的留存變化、付費變化等)
目前創新互聯建站已為近千家的企業提供了網站建設、域名、虛擬空間、綿陽服務器托管、企業網站設計、萬榮網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發展。
本文主要介紹在 Python 中常用的兩種曲線擬合方法:多項式擬合 和 自定義函數擬合。
通過多項式擬合,我們只需要指定想要擬合的多項式的最高項次是多少即可。
運行結果:
對于自定義函數擬合,不僅可以用于直線、二次曲線、三次曲線的擬合,它可以適用于任意形式的曲線的擬合,只要定義好合適的曲線方程即可。
運行結果:
輸入以下代碼導入我們用到的函數庫。
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(0,5,0.1);
y=np.sin(x);
plt.plot(x,y)
采用剛才代碼后有可能無法顯示下圖,然后在輸入以下代碼就可以了:
plt.show()
# 自定義繪制ks曲線的函數
def plot_ks(y_test, y_score, positive_flag):
# 對y_test,y_score重新設置索引
y_test.index = np.arange(len(y_test))
#y_score.index = np.arange(len(y_score))
# 構建目標數據集
target_data = pd.DataFrame({'y_test':y_test, 'y_score':y_score})
# 按y_score降序排列
target_data.sort_values(by = 'y_score', ascending = False, inplace = True)
# 自定義分位點
cuts = np.arange(0.1,1,0.1)
# 計算各分位點對應的Score值
index = len(target_data.y_score)*cuts
scores = target_data.y_score.iloc[index.astype('int')]
# 根據不同的Score值,計算Sensitivity和Specificity
Sensitivity = []
Specificity = []
for score in scores:
? ? # 正例覆蓋樣本數量與實際正例樣本量
? ? positive_recall = target_data.loc[(target_data.y_test == positive_flag) (target_data.y_scorescore),:].shape[0]
? ? positive = sum(target_data.y_test == positive_flag)
? ? # 負例覆蓋樣本數量與實際負例樣本量
? ? negative_recall = target_data.loc[(target_data.y_test != positive_flag) (target_data.y_score=score),:].shape[0]
? ? negative = sum(target_data.y_test != positive_flag)
? ? Sensitivity.append(positive_recall/positive)
? ? Specificity.append(negative_recall/negative)
# 構建繪圖數據
plot_data = pd.DataFrame({'cuts':cuts,'y1':1-np.array(Specificity),'y2':np.array(Sensitivity),
? ? ? ? ? ? ? ? ? ? ? ? ? 'ks':np.array(Sensitivity)-(1-np.array(Specificity))})
# 尋找Sensitivity和1-Specificity之差的最大值索引
max_ks_index = np.argmax(plot_data.ks)
plt.plot([0]+cuts.tolist()+[1], [0]+plot_data.y1.tolist()+[1], label = '1-Specificity')
plt.plot([0]+cuts.tolist()+[1], [0]+plot_data.y2.tolist()+[1], label = 'Sensitivity')
# 添加參考線
plt.vlines(plot_data.cuts[max_ks_index], ymin = plot_data.y1[max_ks_index],
? ? ? ? ? ymax = plot_data.y2[max_ks_index], linestyles = '--')
# 添加文本信息
plt.text(x = plot_data.cuts[max_ks_index]+0.01,
? ? ? ? y = plot_data.y1[max_ks_index]+plot_data.ks[max_ks_index]/2,
? ? ? ? s = 'KS= %.2f' %plot_data.ks[max_ks_index])
# 顯示圖例
plt.legend()
# 顯示圖形
plt.show()
# 調用自定義函數,繪制K-S曲線
plot_ks(y_test = y_test, y_score = y_score, positive_flag = 1)
作用就是把合理的數據轉換為需要的類型。int()整數,float()浮點數,str()字符串,list()列表,tuple()元組,set()集合……
比如a='12'這個是字符串類型,用int函數a=int(a)這時變量a就是整型,字符串'12'變為了整數12。Python沒有變量聲明的要求,變量的屬性在賦值時確定,這樣變量的類型就很靈活。
有一種題目判斷一個整數是否回文數,用字符串來處理就很簡單
a=1234321#整數
if str(a)==str(a)[::-1]:#借助字符串反轉比較就可以確定是否回文數。
還比如元組b=(1,3,2,4),元組是不可以更新刪除排序成員的,但是列表是可以的,通過列表函數進行轉換來實現元組的更新刪除和排序。
b=(1,3,2,4)
b=list(b)
b.sort()
b=tuple(b)
這時得到的元組b就是一個升序的元組(1,2,3,4)
再比如你要輸入創建整數列表或者整數元組基本上寫法相同,就是用對應的函數來最后處理。
ls=list(map(int,input().split()))#這個就是列表
tup=tuple(map(int,input().split()))#這個就是元組
再比如有個叫集合的,集合有唯一性,可以方便用來去重。
ls=[1,2,3,1,2,3,1,2,3]
ls=list(set(ls))#通過set()去重后,現在的ls里就是[1,2,3]去重后的列表。
有
當然有,這就是Python函數圖像工具(EXE)。 本程序運用Python中最令人喜愛的數據處理工具numpy和超強的圖像庫matplotlib,實現13種不同類別函數的分類圖像整理,展示圖像均可以保存為圖片的形式,具備拖動、放大等功能
本文題目:python曲線轉函數 python求曲線切線
分享網址:http://vcdvsql.cn/article10/hhpgdo.html
成都網站建設公司_創新互聯,為您提供企業網站制作、網站收錄、電子商務、App開發、外貿網站建設、標簽優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯