摘要:該文在傳感器技術處理的基礎上,對泡茶的用量、溫度和時間三個方面進行了深入研究,針對用戶泡茶偏好的個性化特征提取問題,提出一種動態(tài)分割算法,對泡茶偏好進行上下文特征提取,從而為用戶泡茶偏好的特征提取和個性化推薦服務提供了一種有效的解決方案。
關鍵詞:動態(tài)分割算法;泡茶;個性化;特征提取
中圖分類號:TP391 文獻標識碼:A
文章編號:1009-3044(2020)19-0179-03
開放科學(資源服務)標識碼(OSID):
1 背景
考慮到用戶泡茶行為主要受茶葉種類、茶具大小、年齡結(jié)構(gòu)、泡茶歷史、季節(jié)、氣候、健康狀況等諸多因素的影響,其在泡茶過程中最終都會直接表現(xiàn)為茶葉用量、水溫、時間三個方面的個人偏好和習慣特征。為了準確獲取用戶個性化飲的茶偏好,本文針在物聯(lián)網(wǎng)處理技術的基礎上,提出一種基于動態(tài)分割算法的個性化泡茶偏好知識獲取方法,該方法主要從用量、溫度和時間三個方面進行研究,通過物聯(lián)網(wǎng)傳感器技術采集用戶泡茶數(shù)據(jù),提取出個性化泡茶特征,利用數(shù)據(jù)動態(tài)分割法獲取用戶泡茶偏好上下文,從而建立準確的用戶泡茶信息庫,實現(xiàn)對用戶信息呈現(xiàn)或茶品推薦等功能。
2 個性化泡茶偏好特征提取
所謂用戶泡茶偏好主要是指用戶在一定時間段內(nèi),對某樣茶品或某類茶品的食用情況。不同茶品在泡茶過程的基本要求和方式手法上雖有所不同,個性需求、行為特征和個人偏好也千差萬別,但歸納起來,可以通過用量、水溫和時間這三個關鍵參數(shù)來具體描述。
2.1茶葉用量特征提取
茶葉種類繁多,類別不同其用量各異,泡一壺好茶,茶葉用量的掌握尤為關鍵,為諸多關鍵參數(shù)之首。每次茶葉用量的多少并沒有統(tǒng)一的固定標準,主要受茶葉種類、茶具大小、年齡結(jié)構(gòu)、泡茶歷史以及飲用習慣等諸多因素的影響,鑒于用戶單次泡茶的茶葉用量不會太大,泡茶其用量可以通過壓力感應的方式稱重獲取。
考慮到壓力傳感器對壓力十分敏感,在稱重過程中難免出現(xiàn)偏移量誤差,因此,系統(tǒng)在托盤底部均勻布置3個壓力傳感器,采用單位時間內(nèi)多個壓力傳感器采集數(shù)據(jù)求平均的方法,來獲取可靠的茶葉用量。
用戶泡茶偏好用量獲取與處理算法思想可以表述為:
1)建立數(shù)組集合ArrayWeight={ArrayWeighti,ArrayWeight2,ArrayWeight3],用于存放各壓力傳感器采集茶盒和茶葉的數(shù)據(jù),其中,ArrayWeight,表示第i壓力傳感器采集數(shù)據(jù)(1《i≤3)
2)系統(tǒng)初始化:ArrayWeight=φ,初始化茶葉用量Weight-Num=0,初始化壓力測試監(jiān)視哨newFlags=false,表示之前接收的傳感器數(shù)據(jù)已經(jīng)處理,將要從傳感器接收新數(shù)據(jù);
3)采集一次傳感器數(shù)據(jù);
4)初始化ArrayWeight=φ,分別將3個壓力傳感器采集到的數(shù)據(jù)存人到ArrayWeight集合中,即ArrayWeight[3]={第1個壓力傳感器采集數(shù)據(jù),第2個壓力傳感器采集數(shù)據(jù),第3個壓力傳感器采集數(shù)據(jù)】,并對各壓力傳感器數(shù)據(jù)求平均值,將其存入WeightNum中,即:
同時修改壓力測試監(jiān)視哨狀態(tài)newFlags=true;
5)判斷newFlags是否為真,若為真,則執(zhí)行3),若為假則執(zhí)行5);
6)輸出WeightNum,同時修改壓力測試監(jiān)視哨狀態(tài)new-Flags=false;
7)結(jié)束。
2.2 泡茶水溫特征提取
歷來泡茶對水溫的把握十分講究,水溫度不同,茶的色、香、味相差甚遠,泡出茶葉的有效成分也就不同。水溫過高,茶葉容易泛黃味苦,所含維生素C等大量營養(yǎng)成分遭受破壞;溫度過低,不能使茶葉中的有效成分充分浸出,茶味淡薄。系統(tǒng)通過布置在茶具底部的不銹鋼防水溫度傳感器,可以采集到用戶泡茶過程中的水溫傳感器數(shù)據(jù),通過對這些數(shù)據(jù)的處理,就可以獲取用戶一次泡茶過程中對水溫的需求情況;
基本思路為:將傳感器捕獲到的數(shù)據(jù)存儲于動態(tài)數(shù)組中,并按照時間段將動態(tài)數(shù)組劃分劃分成不同的段,每段對應一定時間內(nèi)較為穩(wěn)定的溫度傳感器數(shù)據(jù),通過對每個段內(nèi)的傳感器數(shù)據(jù)求平均值,就可以得到較為可靠的溫度傳感器數(shù)據(jù);通過計算相鄰兩個分段的均值差,就可以求出水溫的變化量。
動態(tài)分割算法主要采用前向窺探機制,算法首先需要確定出相鄰兩個分段均值差的偏差范圍,通過訓練設置合適的偏差閾值并進行初始化,當傳感器新獲取數(shù)據(jù)時,需要與前一分段的均值進行比較,判斷是否在閾值范圍之內(nèi),如果在閾值范圍內(nèi)則將新獲取數(shù)據(jù)添加到前一分段,否則重新劃分一個時間分段。通過這種方式可以很好地對動態(tài)分割進行時間分段,并且同時對噪點數(shù)據(jù)進行去噪處理。
前向窺探機制的動態(tài)分割算法提取泡茶水溫的基本特征,其算法可做如下描述:
1)建立動態(tài)數(shù)組集合ArrayList,用于存放溫度傳感器捕獲的所有數(shù)據(jù)。ArrayList= {ArrayList1,ArrayList2,ArrayList3,…,Ar-rayListn),ArrayList.表示第i次溫度傳感器的捕獲數(shù)據(jù),i∈n;
ArrayListi為三元數(shù)據(jù),包含分段屬性、溫度屬性和時間屬性,表示為ArrayListi<分段,溫度,時間>=ArrayListi, ArrayListi表示第i次溫度傳感器的捕獲數(shù)據(jù),該數(shù)據(jù)屬于動態(tài)分割的第PiecewiseCount,組,溫度值為Temperature i攝氏度,捕獲該數(shù)據(jù)的時間為PiecewiseDateti-me,;
2)系統(tǒng)初始化:動態(tài)數(shù)組初始化ArrayList=φ,閾值初始化ThresholdValue=t( OCOs)秒,設置起始標志Flags=True;
3)捕獲第一個溫度傳感器數(shù)據(jù),接收溫度屬性參數(shù)Value,和時間參數(shù)Datetime,;
4)初始化一個分割段:PiecewiseCount=1,將第一次獲取的數(shù)據(jù)屬性和時間屬性分別存人ArrayList數(shù)組中,則此時ArraYL-isti=<1, Val-uei.Datetime i>;設置分割段監(jiān)視哨j=1;
5)捕獲溫度傳感器第i個數(shù)據(jù),接收溫度屬性參數(shù)Valuei和時間屬性參數(shù)Datetime i;
6)判斷Value與PiecewiseCount.時間段的均值只差的絕對值小于或等于閾值ThresholdValue的條件是否為真,若為真,則說明第i個傳感器數(shù)據(jù)與前一個i-1傳感器數(shù)據(jù)的分割段為同一段,則執(zhí)行7),否則執(zhí)行8);
7)將第i個數(shù)據(jù)ArrayList.寫入動態(tài)數(shù)組中,同時,j++準備接受下一個傳感器數(shù)據(jù);執(zhí)行9)
8)重新創(chuàng)建一個數(shù)據(jù)分割段,并將第i個數(shù)據(jù)ArrayList.寫入動態(tài)數(shù)組中;同時,j=1準備接受下一個傳感器數(shù)據(jù);執(zhí)行9)
9)如果Flags=True,則執(zhí)行5),否則執(zhí)行10)
10)對各分割段求均值,輸出水溫特征值;
11)結(jié)束。
根據(jù)上述算法描述,動態(tài)分割過程代碼如下:
Question:
Input://輸入所有溫度傳感器捕獲的溫度和時間
OutPut:,/輸出泡茶水溫值
Procodone:
{
ArravList=φ;//動態(tài)數(shù)組初始化
ThresholdValue=t;//閾值初始化,
PiecewiseCount=0;//分段參數(shù)初始化
Value=0;Datetime=now;//當前傳感器數(shù)據(jù)的數(shù)值屬性和時間屬性初始化
Flags=True;//起始標志位初始化
//接收第一個傳感器數(shù)據(jù)并寫入動態(tài)數(shù)組
If(PiecewiseCount==0)
(
PiecewiseCount++;//為第一個傳感器數(shù)據(jù)創(chuàng)建一個數(shù)據(jù)分割段
//準備動態(tài)數(shù)組元素數(shù)據(jù)
PiecewiseCounti =PiecewiseCount;
Temperaturei =Value;
iecewiseDatetimei= Datetime
add( ArrayListi)//將ArrayList,元素寫入動態(tài)數(shù)組
)
i=l;//統(tǒng)計傳感器數(shù)據(jù)輸入個數(shù)并初始化
j=l;//統(tǒng)計同一分割段數(shù)據(jù)個數(shù)并初始化
Where(Flags)
{
i++;ThresholdValue)//判斷Value與PiecewiseCounti時間段的均值只差的絕對值小于或等于閾值ThresholdValue的條件是否為真
{
//若為真
PiecewiseCount.=PiecewiseCounti_i//則說明第i個傳感器數(shù)據(jù)與前一個i-l傳感器數(shù)據(jù)的分割段為同一段
Temperature,=Valuei;/,接收當前傳感器數(shù)據(jù)的溫度值
PiecewiseDatetimei= Datetime,;,/接收當前傳感器數(shù)據(jù)的時間值
add (ArrayListi)∥將第i個數(shù)據(jù)ArrayList,寫入動態(tài)數(shù)組中;
j++;//準備接受下一個傳感器數(shù)據(jù)
)
Else
{
//若為假
PiecewiseCount++∥則說明第i個傳感器數(shù)據(jù)與前一個i-l傳感器數(shù)據(jù)的分割段為不同段,需要重新創(chuàng)建一個數(shù)據(jù)分割段
PiecewiseCount;=PiecewiseCount.//將新分割段參數(shù)值寫入當前傳感器數(shù)據(jù)的分段元素中;
Temperature,=Valuei;/,接收當前傳感器數(shù)據(jù)的溫度值
PiecewiseDatetimei= Datetime,;,/接收當前傳感器數(shù)據(jù)的時間值
add(ArrayListi)∥將第i個數(shù)據(jù)ArrayList,寫入動態(tài)數(shù)組中;
j=l;//準備接受下一個傳感器數(shù)據(jù)
)
)
從ArrayList中輸出泡茶水溫值的均值P;
2.3 沖泡時間
茶葉沖泡的時間和次數(shù)由于可以采用傳統(tǒng)的鬧鐘定時方式準確獲取,因此,在個性化泡茶偏好的時間特征提取過程中,主要采傳統(tǒng)的鬧鐘定時來獲取茶葉沖泡的可靠時間。
3 結(jié)束語
本文在傳感器技術處理的基礎上,對泡茶的用量、溫度和時間三個方面進行了深入研究,針對用戶泡茶偏好的個性化特征提取問題,提出一種動態(tài)分割算法,對泡茶偏好進行上下文特征提取,從而為用戶泡茶偏好的特征提取和個性化推薦服務提供了一種有效的解決方案。
參考文獻:
[1]汪建,杜世平.基于顏色和形狀的茶葉計算機識別研究[J].茶葉科學,2008,28(6): 420-424.
[2]李翠平,藍夢微,鄒本友,等,大數(shù)據(jù)與推薦系統(tǒng)[Jl,大數(shù)據(jù),2015,1(3): 23-35.
[3]樊祥超,於志文,耿會東,等.智能空間中的用戶飲食偏好獲取與推薦系統(tǒng)[J].計算機工程,2011,37(22): 237-239.
[4]孫濤.個性化商品推薦系統(tǒng)的設計與實現(xiàn)[D].長春:吉林大學。2015.
【通聯(lián)編輯:謝媛媛】
基金項目:教育部科技發(fā)展中心:新一代信息技術創(chuàng)新(項目編號:2018A02038);武陵山區(qū)特色資源開發(fā)與利用研究中心開放項目(項目編號:WLYJ2017002)
作者簡介:徐儒(1982-),男,重慶人,實驗師,碩士,研究方向為智能信息處理、模式識別、數(shù)據(jù)挖掘、農(nóng)業(yè)大數(shù)據(jù)。